2

我正在尝试使用 Lucene.net 来应用全文搜索,并且能够在此链接 http://www.codeproject.com/Articles/320219/Lucene-Net-ultra-fast-search-for-MVC-or的帮助下使用它-WebForms

但它有一个仅用于一些简单数据的示例

而我有一个场景,其中两个实体以一对多关系链接。

class Product
{
  public int Id{get;set;}
  public int Name{get;set;}
}

class Shop
{
  public int Id{get;set;}
  public int Name{get;set;}
  public List<Product> Products{get;set;}
}

现在实现/(将其作为单个表或文档存储在索引中)这有点棘手。

我应该为索引创建两个文档吗?

但是,如果进行了搜索,那么链接将是一个问题,Product它将返回只有Product商店而不是商店的结果。

出路是什么?或其他方式?

- 编辑 - -

需要将这些 1:N 相关数据存储在单个文档中,因为我将在两个实体的任何字段上进行搜索。

因此,即使在 lucene 返回结果之后,它的 id 也可用于两个实体。

4

1 回答 1

2

一种选择是在索引中为每个产品文档创建一个字段,该字段包含所有商店 ID。

文件(产品)

Name             | Shop
------------------------
Super Product XY | 1 5 7

现在,如果您只想在一家商店中搜索,您可以这样做。

+Name:"Super Product" +Shop:5

一般来说,这完全取决于您的要求。您是否需要搜索所有商店并找出哪个商店提供产品,或者您是否希望将搜索限制在单个或多个商店。

=== 更新 ===

如果您想接收 Product-ID 和 Shop-ID,您可以将字段 ProductID 和 ShopID 定义为“Field::STORE_YES”(C++ 变体,我不知道 .NET 定义)。

(STORE_YES)|(INDEXED_TOKENIZED)| (STORE_YES)
ProductID  | Name              | ShopID
--------------------------------------
1          | Super Product XY  | 1 5 7
2          | Not good Product  | 2 5 6
--------------------------------------

从找到的 Document 对象中,您可以读取ProductIDShopID字段,这将为您提供所需的一切。ShopID将作为字符串返回,您可以用空格 (" ") 将其拆分,并且您有一个 ShopID 数组。

于 2012-12-03T13:36:18.330 回答