私は Lucene dot net バージョン 2.9 を使用しており、クエリを次のように作成しています (GetQuery メソッド)。同じクエリで Luke ツールを使用して、同じインデックスから結果を取得できました。ただし、dotnet API 経由ではありません。それが Lucene.net のバグなのかわからない? または私の側の間違い。インデックス作成は標準のアナライザーで行われ、検索しているすべてのフィールドを分析しました。
注: 同じインデックスを持つ Luke で動作しています。Java Lucene ライブラリではなく .net lucene 2.94 を使用しています
Luke ツールで動作しているクエリは次のとおりです。
+(コンテンツ:ポラリス 場所:ポラリス) +内線:/pdf/xls/doc/docx
動作していない c# コードは次のとおりです。
private static BooleanQuery GetQuery(string term, string exts)
{
string[] fields = { MetaKeys.Content, MetaKeys.Location };
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query multiFieldQuery = parser.Parse(term);
TermQuery extQuery = new TermQuery(new Term(MetaKeys.Ext, exts));
BooleanQuery combinedQuery = new BooleanQuery();
combinedQuery.Add(multiFieldQuery, BooleanClause.Occur.MUST);
if (extQuery != null)
{
combinedQuery.Add(extQuery, BooleanClause.Occur.MUST);
}
return combinedQuery;
}
そして、それは次のように使用されます
string exts = "/pdf/xls/doc/docx";
BooleanQuery combinedQuery = GetQuery(term, exts);
TopDocs docs = indexSearch.Search(combinedQuery, to);
//resulting in 0 Hits
私の以前の質問を閉じた人々への注意: 質問を閉じる前に、元の投稿者にそれを修正する機会 (少なくとも 24 時間) を与えてください。