2014-05-02 79 views
0

我有lucene.net 2.9一個奇怪的問題: 如果我尋找:high-quality沒有找到任何結果。我發現連字符字符( - )是一個Lucene的問題,所以我搜索high quality它完美地工作。Lucene的搜索數字的

當我搜索30-40它顯示的結果,但30 40沒有顯示任何。

第二方案是在第一與一個矛盾。 我想,因爲我有一個數字文本,第二個是相關的,但我沒有找到有關網絡的東西。

+0

你能略低更具體到究竟你在做什麼。你如何調用lucene?使用什麼數據類型等等。 – CodeTower

+0

我有一些PDF索引。我檢查了盧克,當我用盧克搜索時,我也遇到了同樣的問題,如果我正在搜索的文本包含「減號字符」沒有找到,並且文本包含數字後面跟着減號,再後面跟着數字被找到。 1)沒有找到高質量; 2)發現高質量; 3)找到30-40; 4)未找到30 40 – user3596223

回答

0

我猜你使用StandardAnalyzer索引你的條款,然後搜索時沒有進行某種形式的分析,或採用不同的分析形式。

2.9 StandardAnalyzerClassicAnalyzer,版本3.1)在連字符周圍有一些有趣的行爲。引述StandardTokenizer documentation

把詞的連字符,除非有一些令牌,在這種情況下,整個令牌被解釋爲產品編號,而不是分裂。

所以兩個連字符的單詞(或字母任何集合)將被分割爲獨立的令牌,當扔進組合任何數量將解釋整個事情作爲一個產品編號,指數爲英格爾的道理,連字符和所有的,所以:

  • 「高育人質量」 - > 「高」 和 「質量」
  • 「AB-CD」 ---------> 「AB」 和「CD 「
  • 」30-40「---------」30-40「
  • 」ab-c4「--------->」ab-c4「
  • 「30 40」 ---------> 「30」 和 「40」

所以,如果在這樣的分析字段構建 「高質量」 一個TermQuery,你將不會得到任何結果(儘管如果使用QueryParser和相同的分析儀)。當搜索「30-40」時,「30-40」的TermQuery將完全匹配。但「30」和「40」都不會找到匹配項。

所以,我不是你如何查詢運行爲不匹配有(可能使用StandardAnalyzer當索引和WhitespaceAnalyzer查詢時?),但希望在正確的方向點。

-1

你需要加密「 - 」登錄URL參數。我認爲它會正常工作。