在Solr(3.3)中,是否可以通過EdgeNGramFilterFactory
可以搜索字段,並且對短語查詢也很敏感?Solr:使用EdgeNGramFilterFactory進行精確短語查詢
例如,我在尋找,如果包含 「contrat INFORMATIQUE」,會發現一個領域,如果用戶類型:
- contrat
- INFORMATIQUE
- 對照
- Informa公司
- 「contrat informatique」
- 「contrat info」
目前,我做了這樣的事情:
<fieldtype name="terms" class="solr.TextField">
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>
</fieldtype>
...但它未能對短語查詢。
當我看到在Solr管理模式分析,我發現「contrat INFORMATIQUE」產生的以下標記:
[...] contr contra contrat in inf info infor inform [...]
所以查詢作品有「contrat在」(連續標記),但不「contrat inf」(因爲這兩個令牌是分開的)。
我很確定任何種類的詞幹都可以使用短語查詢,但是我找不到在EdgeNGramFilterFactory
之前使用的正確標記詞的過濾器。
嗨,澤維爾。你能解釋一下,你是如何將「cont info」轉換爲+ cont + info的嗎?或者這只是識別雙引號和手動轉換? 我想解決這個問題:http:// stackoverflow。com/questions/37033381/solr-search-field-best-practices – wattale
這是一個手動操作,查找雙引號並添加加號。我沒有發現任何可以自動執行此操作的內容: -/ –
感謝xavier的回覆,對於我來說,抓取這麼多內容後也找不到開箱即用的解決方案。我認爲我正在通過手動方式重新發明輪子。但我想手動做它是唯一可用的選項:| – wattale