我試圖使用Edismax分析器在Solr文本字段中查找包含星號/查詢標記的文檔。當我使用轉義(fq={!edismax}textfield:*\~*
)搜索常用文本(fq={!edismax}textfield:*sometext*
)或甚至其他special Lucene character時,一切正常。當在Edismax中使用前導通配符時,轉義的星號/查詢標記不會轉義
但是搜索*
(fq={!edismax}textfield:*\**
)或?
(fq={!edismax}textfield:*\?*
)時,這些字符似乎沒有進行轉義,因爲將返回所有的文件。我也嘗試URL encoding轉義字符(如\%2A
而不是\*
),但結果是相同的。
問題似乎關注領先通配符而已,因爲fq={!edismax}textfield:\**
和fq={!edismax}textfield:\?*
返回正確的結果,但fq={!edismax}textfield:*\*
和fq={!edismax}textfield:*\?
不(以及fq={!edismax}textfield:*sometext\*
等)。
如何使用帶有星號通配符的Edismax搜索*
/?
?
我會爲我工作,如果我使用像WhitespaceTokenizerFactory的標記。不過,我需要搜索嚴格的短語重合並使用KeywordTokenizerFactory。因此,要查找字段文本的一部分,我必須使用通配符。 – dev4 2012-04-05 08:42:09
您應該能夠得到嚴格的短語重合,而不必將每個字段值視爲單個標記。對令牌執行正則表達式本質上是一個全表掃描。這保證不會擴展。我推薦一種不同的方法。 – 2012-04-16 20:17:01