QueryParserに複数のフィールドを組み込む方法 を読みましたが、取得できませんでした。
現時点では、次のような非常に奇妙な構造をしています。
parser = New QueryParser("bodytext", analyzer)
parser2 = New QueryParser("title", analyzer)
query = parser.Parse(strSuchbegriff)
query2 = parser.Parse(strSuchbegriff)
私は次のようなことのために何ができますか?
parser = New QuerParser ("bodytext" , "title",analyzer)
query =parser.Parse(strSuchbegriff)
そのため、パーサーはフィールド「bodytext」およびフィールド「title」で検索ワードを探します。
これを行うには3つの方法があります。
最初の方法は、クエリを手動で構築することです。これは、QueryParser
が内部的に行うことです。これは最も強力な方法であり、QueryParser
のよりエキゾチックな機能へのアクセスを防止する場合、ユーザー入力を解析する必要はありません。
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
BooleanQuery booleanQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("bodytext", "<text>"));
Query query2 = new TermQuery(new Term("title", "<text>"));
booleanQuery.add(query1, BooleanClause.Occur.SHOULD);
booleanQuery.add(query2, BooleanClause.Occur.SHOULD);
// Use BooleanClause.Occur.MUST instead of BooleanClause.Occur.SHOULD
// for AND queries
Hits hits = searcher.Search(booleanQuery);
2番目の方法はMultiFieldQueryParser
を使用することです。これはQueryParser
と同様に動作し、複数のフィールドを検索することを除いて、所有するすべてのパワーへのアクセスを許可します。
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
new string[] {"bodytext", "title"},
analyzer);
Hits hits = searcher.Search(queryParser.parse("<text>"));
最後の方法は、QueryParser
こちらを参照 の特別な構文を使用することです。
IndexReader reader = IndexReader.Open("<lucene dir>");
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer();
QueryParser queryParser = new QueryParser("<default field>", analyzer);
// <default field> is the field that QueryParser will search if you don't
// prefix it with a field.
string special = "bodytext:" + text + " OR title:" + text;
Hits hits = searcher.Search(queryParser.parse(special));
もう1つのオプションは、bodytextandtitleというコンテンツをインデックス化するときに新しいフィールドを作成することです。このフィールドに、bothbodytextとtitleのコンテンツを配置できます。 1つのフィールドを検索する必要があります。