2010-02-24 52 views
2

我正在尋找在Lucene中有 「等於」 運算符來實現,如:Lucene的BooleanQuery等於/在

return new TermQuery(new Term(getName(), getValue())); 

對於像谷:的customerID:亞達-UT-08ec5de9-8813-4361-be88-55695ddfaa00

這是行得通的。

但是,如果我使用一個「in」運算符實現了一個布爾查例如;

final BooleanQuery booleanQuery = new BooleanQuery(); 
for (final String aValue : value) { 
    booleanQuery.add(new TermQuery(new Term(getName(), aValue)), BooleanClause.Occur.SHOULD); 
} 

也不會找到亞達-UT-08ec5de9-8813-4361-be88-55695ddfaa00

任何客戶大量的測試我假設之後,「亞達-UT-08ec5de9-的長度8813-4361-be88-55695ddfaa00'或破折號可能是問題。 (我使用令牌保存在數據庫中)使用BooleanQuery時。

任何線索?

編輯:有什麼奇怪的是: - 這正與 「中」(布爾查詢):25c20c21-bd88-4a6d-aa02-209b5fb6fb11 - 這是不是與它的工作:亞達-UT-08ec5de9- 8813-4361-be88-55695ddfaa00

發現的解決方案:Lucene的話被收錄爲小寫:)

+2

嘗試在Query對象上調用'toString()',這會給你一個執行內容的文本表示,並且對於調試可能非常有用 – skaffman 2010-02-24 13:02:34

+2

通常你應該在索引和解析時使用相同的分析器請求參數。降低過濾器是StandardAnalyzer的一部分。 – Yaroslav 2010-02-25 20:35:01

+0

fyi - 如果您找到解決方案,最好將其發佈爲您自己問題的答案:-) – Justin 2010-04-23 08:09:13

回答

0

奇怪的解決方案,我可是......僅此而已:)

Lucene的話索引爲較低的 情況:)