2014-05-06 50 views
0

我已經在Solr的店鋪名稱索引像Solr的搜索查詢不考慮特殊字符

H&M 
Lotte & Anna 
fan & more 
Tele2 
Pure Tea 

我有以下兩個問題(與優先級的重要性)

  1. 如果我搜索「 H & M「我永遠不會得到任何結果。如果我搜索「te & Ann」,我會得到預期的結果。

  2. 如果我搜索「TE &的」我得到的結果是商Tele2和純茶,而我本來期望「樂天&安娜」出現在列表的首位。

看起來好像&字符沒有考慮在內。我在這裏做錯了什麼?

這些都是我的特定領域(包括查詢和索引)

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

分析好了,第一問題是與WordDelimiterFilterFactorywdfftypes.txt指定& => ALPHA,並從StandardTokenizerFactoryWhitepsaceTokenizerFactory改變開關解決

<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" types="wdfftypes.txt"/> 

(在分析儀和查詢中編輯)。

第二個問題仍然存在。 在debugQuery我得到以下

"debug": { 
    "rawquerystring": "te & an", 
    "querystring": "te & an", 
    "parsedquery": "text:te text:an", 
    "parsedquery_toString": "text:te text:an", 
    "explain": { 
     "": "\n0.8152958 = (MATCH) product of:\n 1.6305916 = (MATCH) sum of:\n 1.6305916 = (MATCH) weight(text:te in 498) [DefaultSimilarity], result of:\n  1.6305916 = score(doc=498,freq=1.0 = termFreq=1.0\n), product of:\n  0.8202942 = queryWeight, product of:\n   5.300835 = idf(docFreq=87, maxDocs=6491)\n   0.15474811 = queryNorm\n  1.9878132 = fieldWeight in 498, product of:\n   1.0 = tf(freq=1.0), with freq of:\n   1.0 = termFreq=1.0\n   5.300835 = idf(docFreq=87, maxDocs=6491)\n   0.375 = fieldNorm(doc=498)\n 0.5 = coord(1/2)\n" 
    }, 

所以,我應該怎麼修改,這樣的權重有利於期望的結果的轉變?

回答

2

使用「NGramFilterFactory」而不是「EdgeNGramFilterFactory」。這樣,「樂天&安妮」,被索引爲「lo,ot,tt,te,lot,ott,tte,lott,otte,lotte」和「an,nn,ne,ann,nne,anne」。所以當您搜索「tte & ann」時,文檔將匹配。