2013-03-02 11 views

答えて

9

二つは

1)インデックス・タイム・アプローチに近づく:キャッチオールフィールドを使用します。これは、すべてのフィールドのすべてのテキスト(入力文書のテキスト全体)を追加し、結果としてその巨大なテキストを1つのフィールドに配置することにほかなりません。キャッチオールフィールドとして機能するように、インデックス作成中に追加のフィールドを追加する必要があります。

2)検索時のアプローチ:BooleanQueryを使用して、複数のクエリ(TermQueryインスタンスなど)を結合します。これらの複数のクエリは、すべてのターゲットフィールドをカバーするように構成できます。

Exampleこの記事の最後にチェックしてください。

実行時にターゲットフィールドリストを知っている場合は、アプローチ2を使用します。それ以外の場合は、第1のアプローチを使用する必要があります。

+0

感謝を同じquesitonに私の透過性の答えをチェックアウトします。最初のアプローチは、同じインデックスにさまざまなタイプの製品を保存するときに使用する方法です。たとえば、プリンタとモニターのように、各フィールドごとに異なるフィールドが存在するが、単純な検索文字列で "フルテキスト"検索を使用し、一致する商品。 – nothingisnecessary

20

既に持っているものより多くのものを索引付けする必要もなく、異なる照会を組み合わせる必要もないもう1つのアプローチは、MultiFieldQueryParserを使用しています。

検索対象のフィールドとクエリのリストを提供することができます。

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
       Version.LUCENE_41, 
       new String[]{"title", "content", "description"}, 
       new StandardAnalyzer(Version.LUCENE_41)); 

Query query = queryParser.parse("here goes your query"); 

これは、Javaで書かれた元のluceneライブラリで行う方法です。 MultiFieldQueryParserがlucene.netでも利用可能かどうかはわかりません。

+0

MultiFieldQueryParserはエレガントなアプローチです:) – phani

+0

ありがとうございます。あなたの答えは悪くないです;)+1 – javanna

3

MultifieldQueryParser」を使用してすべてのフィールドを検索する簡単な方法の1つは、IndexReader.FieldOption.ALLです。

ここはC#の例です。

Directory directory = FSDirectory.Open(new DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath))); 

    //get analyzer 
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 

    //get index reader and searcher 
    IndexReader indexReader__1 = IndexReader.Open(directory, true); 
    Searcher indexSearch = new IndexSearcher(indexReader__1); 

    //add all possible fileds in multifieldqueryparser using indexreader getFieldNames method 
    dynamic queryParser = new MultiFieldQueryParser(Version.LUCENE_29, indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer); 
    dynamic query = queryParser.Parse(Criteria); 
    TopDocs resultDocs = null; 

    //perform search 
    resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc()); 
    dynamic hits = resultDocs.scoreDocs; 

click here vb.netに優れた全体像の説明のための

+0

ここでは、ダックの入力(つまり、「動的」キーワード)を使用する点はありません。たぶん、あなたは 'var'で型interenceを使いたがっていますか? –

関連する問題