我想在兩個字段中搜索我的索引,名爲「a」和「b」。我給出的搜索像Freud -- theories of psychology
,我想執行以下查詢:如何結合使用OR的兩個Lucene查詢?
(a="Freud" AND b="theories of psychology") OR (b="Freud" AND a="theories of psychology")
我該怎麼辦呢?到目前爲止,我有Lucene的構建使用MultiFieldQueryParser
兩半(firstHalf
和secondHalf
),然後我用
BooleanQuery combined = new BooleanQuery();
combined.add(firstHalf, BooleanClause.Occur.SHOULD);
combined.add(secondHalf, BooleanClause.Occur.SHOULD);
但combined
結合他們允許其中只有「理論」被發現,不是「心理學」被返回的結果,我絕對想要這兩個詞。 Lucene似乎將「心理學理論」分解爲三個單詞,並將它們分別與OR結合。我如何防止這種情況?
firstHalf
樣子:
Query firstHalf = MultiFieldQueryParser.parse(Version.LUCENE_33,
new String[]{"Freud", "theories of psychology"},
new String[]{"a", "b"},
new BooleanClause.Occur[]{BooleanClause.Occur.MUST, BooleanClause.Occur.MUST},
analyzer);
其中analyzer
只是一個StandardAnalyzer
對象。
只是告訴Lucene的不支持布爾邏輯是這樣,這應該= OR!在這種情況下,Action_ 2nd Edition中的_Lucene在95頁是錯誤的。:)所以現在我知道_why_我的查詢被破壞了,只是不知道如何修復它。 – dmn
確定該查詢是正確的?查詢「心理學理論」意味着這三個詞中至少有一個必須出現在某個地方,但它們都不是必需的單詞。 –
@KaiChan不要,我不得不修改這個來限制進去。我想我知道了。 :) – dmn