我觀察到一個奇怪的行爲,但我沒有看到我做錯了什麼。Java Lucene - BooleanQuery和QueryParser的不同結果查詢相同的Lucene查詢語言
我通過多種創建BooleanQueries以下查詢:
+(-(Request.zipCode:18055 Request.zipCode:33333 Request.zipCode:99999) +Request.zipCode:[* TO *]) *:*
...這是我通過toString
更新得到:這樣,我創建的BooleanQuery的一部分,它負責創建這個片段+Request.zipCode:[* TO *])
Query fieldOccursQuery = new TermQuery(new Term(queryFieldName, "[* TO *]"));
我創建了exaclty same(p呃我的理解通過)查詢的QueryParser這樣的:
String querystr = "+(-(Request.zipCode:18055 Request.zipCode:33333 Request.zipCode:99999) +Request.zipCode:[* TO *]) *:*";
Query query = new QueryParser(Version.LUCENE_46, "title", LuceneServiceI.analyzer).parse(querystr);
我處理他們兩人以同樣的方式是這樣的:
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
int max = reader.maxDoc();
TopScoreDocCollector collector = TopScoreDocCollector.create(max > 0 ? max : 1, true);
searcher.search(query, collector);
....
ScoreDoc[] hits = collector.topDocs().scoreDocs;
Map<Integer, Document> docMap = new TreeMap<Integer, Document>();
for (int i = 0; i < hits.length; i++) {
docMap.put(hits[i].doc, indexSearcher.doc(hits[i].doc));
}
不同的結果
像一個指標: stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<Request.zipCode:04103>
通過QueryParser的查詢提供一個文檔預期
通過BooleanQuery查詢不提供1個預期文檔
問題
- 是否有兩個相同的查詢提供可能性不同的結果?將某些屬性設置爲我的布爾查詢等。
- 如何獲得布爾查詢所需的相同結果?
- 我無法找到關於不僅在性能(http://www.gossamer-threads.com/lists/lucene/java-user/144374)關注什麼差別
您沒有提供用於構建BooleanQuery的代碼。你需要這樣做才能讓別人找到問題。不過,我很想知道:這場比賽的目的是什麼?不要看着我喜歡它做任何有用的事情... – femtoRgon
構建BooleanQuery時可能使用了不同的分析器嗎? 我建議你在調試模式下檢查解析器構造的查詢,並查看什麼是結構(通過查看生成的東西的toString()開始) –
@femtoRgon: 謝謝,我添加了代碼對於布爾查詢,我想我找到了導致不同結果的查詢部分。 因爲這是遺留代碼,我只想將查詢更改爲「如果字段位於文檔本身中,則不接受帶有MUST_NOT的文檔」,所以我猜想MatchAllQuery *:*在那裏,如果MUST_NOT' - (... )'是唯一的標準。但我會檢查它是否有意義。 @Yossi Vainshtein: 謝謝,但分析儀是他們兩個相同:'StandardAnalyzer(Version.LUCENE_46)' – timguy