2

全文検索を適用するためにLucene.netを試していましたが、このリンク http://www.codeproject.com/Articles/320219/Lucene-Net-ultra-fast-search-for-MVC-orを使用して使用できました。 -WebForms

しかし、それはいくつかの単純なデータのための例だけを持っています

2つのエンティティが1対多の関係でリンクされているシナリオがあります。

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;}
}

現在、実装/(これを単一のテーブルまたはドキュメントとしてインデックスに格納する)これは少し注意が必要です。

インデックス用に2つのドキュメントを作成する必要がありますか?

ただし、検索が行われ、ショップProductのみで結果が返される場合は、リンクが問題になります。Product

それから抜け出す方法は何ですか?または他の方法?

- 編集 - -

両方のエンティティのいずれかのフィールドを検索するため、これらの1:N関連データを単一のドキュメントに保存する必要があります。

したがって、結果がluceneによって返された後でも、両方のエンティティで使用可能なIDがあります。

4

1 に答える 1

2

1つのオプションは、すべてのショップIDを保持する各製品ドキュメントのインデックスにフィールドを作成することです。

ドキュメント(製品)

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

さて、1つのショップだけで検索したい場合は、このようなことを行うことができます。

+Name:"Super Product" +Shop:5

一般的に、それは絶対にあなたの要件に依存します。すべてのショップを検索して、どのショップが商品を提供しているかを調べる必要がありますか、それとも検索を1つまたは複数のショップに限定しますか。

===更新===

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オブジェクトから、ProductIDフィールドとShopIDフィールドを読み取ることができます。これにより、必要なものがすべて提供されます。ShopIDは文字列として返されます。スペース( "")で分割すると、ShopIDの配列ができます。

于 2012-12-03T13:36:18.330 に答える