2016-03-04 53 views
1

當我在Lucene搜索爲荷蘭字bieten是他們的下面之間的差異:bieten"bieten""*bieten*"*bieten*使用DutchAnalyzer時,並允許主要通配符?如何Lucene的工作,報價和通配符

因爲目前爲止,我可以在解析器語法中找到引號用於處理空格,並且所有單詞總是像他們周圍的通配符一樣搜索。

我之所以問這個問題的原因,是因爲我發現通過使用DutchAnalyzer,所有單詞在輸入索引之前都會被條帶化爲複數。在我的情況下,意味着biet存儲在索引中,而不是bieten。 當用bieten或「bieten」或「bieten」搜索時,它也會將查詢修改爲biet。
但是,當我使用*bieten*查詢不會更改,並保持複數。這並沒有給出任何結果。
所以

bieten -->> biet 
"bieten" -->> biet 
"*bieten*" -->> biet 
*bieten* -->> *bieten* 

爲什麼翻譯成不同的查詢,則其他人最後一次搜索。

的QueryParser語法:https://lucene.apache.org/core/2_9_4/queryparsersyntax.html
截圖的Lucene:http://oi63.tinypic.com/1z5krdg.jpg

回答

1

通配符,正則表達式和模糊查詢未查詢分析器分析,這就是爲什麼它是不同的。

單詞絕對不是用他們周圍的通配符搜索的。查詢*bieten*將用於匹配「xxbietenxx」之類的內容。儘管如此,在句子中找到單詞而不是涉及通配符。這就是分析的目的。它將文本拆分爲單詞術語。

要解釋其中每個查詢:

  • bieten - 簡單的詞語查詢。搜索給定的單詞。
  • "bieten" - 短語查詢。分析並找出給定的多項詞組。在這種情況下,該短語只有一個詞,並且與詞語查詢相同。
  • "*bieten*" - 同樣,短語查詢。 不以以任何方式進行通配符查詢。短語中不能使用通配符。分析器將刪除標點符號,使其與最後一個相同。
  • *bieten* - 通配符查詢。這將匹配「bietenxx」,「xxbieten」和「xxbietenxx」,但不會進行分析,因此與分析後術語「biet」不匹配。