2014-01-07 54 views
0

我有電子商務索引數據與字段名稱PartNumber(項目編號),並在每天刷新數據。Solr返回頂級排名不完全符合條款101它返回S101

在Solr的字段類型文本因爲字段可能包含數字,字符或特殊字符像衝刺。

當我與像術語搜索:

192.168.XX:?XX/solr的/關鍵字/選擇Q = (部分號碼:101)^ 2.0 + OR +(101) &開始= 0 &行= 20 &拼寫檢查=真&版= 2.2 &調試=真& FL = *,得分

查詢結果回報:第一排20:

  • S101
  • 101S
  • 101U

我已經試過部分號碼: 「101」 和101相同的結果總是返回其中101沒有排名第一。

注:如果術語是4個或更多字符(5000,16400,K5125,...等)的頂部結果是更好的,並且通常完全匹配是第一個。

某些調試結果:

<lst name="debug"> 
<str name="rawquerystring">(PartNumber:101)^2.0 OR (101)</str><str name="querystring">(PartNumber:101)^2.0 OR (101)</str> 
<str name="parsedquery">PhraseQuery(PartNumber:"1 10 101"^2.0) PhraseQuery(text:"1 10 101")</str> 
<str name="parsedquery_toString">PartNumber:"1 10 101"^2.0 text:"1 10 101"</str><lst name="explain"> 
<str name="40541432"> 
6.7604995 = (MATCH) sum of: 
    5.1748066 = (MATCH) weight(PartNumber:"1 10 101"^2.0 in 492450) [DefaultSimilarity], result of: 
    5.1748066 = score(doc=492450,freq=1.0 = phraseFreq=1.0 
), product of: 
     0.91124594 = queryWeight, product of: 
     2.0 = boost 
     11.357651 = idf(), sum of: 
      1.5469646 = idf(docFreq=797168, maxDocs=1377508) 
      3.6602204 = idf(docFreq=96332, maxDocs=1377508) 
      6.1504664 = idf(docFreq=7984, maxDocs=1377508) 
     0.040115952 = queryNorm 
     5.6788254 = fieldWeight in 492450, product of: 
     1.0 = tf(freq=1.0), with freq of: 
      1.0 = phraseFreq=1.0 
     11.357651 = idf(), sum of: 
      1.5469646 = idf(docFreq=797168, maxDocs=1377508) 
      3.6602204 = idf(docFreq=96332, maxDocs=1377508) 
      6.1504664 = idf(docFreq=7984, maxDocs=1377508) 
     0.5 = fieldNorm(doc=492450) 
    1.5856929 = (MATCH) weight(text:"1 10 101" in 492450) [DefaultSimilarity], result of: 
    1.5856929 = score(doc=492450,freq=4.0 = phraseFreq=4.0 
), product of: 
     0.4118627 = queryWeight, product of: 
     10.266806 = idf(), sum of: 
      1.407141 = idf(docFreq=916800, maxDocs=1377508) 
      3.1487658 = idf(docFreq=160655, maxDocs=1377508) 
      5.7108994 = idf(docFreq=12392, maxDocs=1377508) 
     0.040115952 = queryNorm 
     3.850052 = fieldWeight in 492450, product of: 
     2.0 = tf(freq=4.0), with freq of: 
      4.0 = phraseFreq=4.0 
     10.266806 = idf(), sum of: 
      1.407141 = idf(docFreq=916800, maxDocs=1377508) 
      3.1487658 = idf(docFreq=160655, maxDocs=1377508) 
      5.7108994 = idf(docFreq=12392, maxDocs=1377508) 
     0.1875 = fieldNorm(doc=492450) 
</str> 
+0

什麼是PartNumber的字段類型和定義,它看起來像問題不在您的查詢。它看起來像在分析和查詢時間過程中分析字段的方式(是否使用ngram等?)。 – Arun

+0

字段類型是與文件相同的默認文件: OldTrain

+0

斷詞: **在索引:** StopFilterFactory,WordDelimiterFilterFactory,LowerCaseFilterFactory,KeywordMarkerFilterFactory,PorterStemFilterFactory,RemoveDuplicatesTokenFilterFactory **在查詢:** WhitespaceTokenizerFactory,SynonymFilterFactory,StopFilterFactory,WordDelimiterFilterFactory,LowerCaseFilterFactory, KeywordMarkerFilterFactory,PorterStemFilterFactory,RemoveDuplicatesTokenFilterFactory – OldTrain

回答

1

不知道你PARTNUMBER字段定義,我的投機的回答是,它看起來像你索引和查詢基於NGRAM類型的分析。如果您需要使用很好的ngram,請在索引過程中執行此操作。但在查詢時間分析ngram可以給出這種類型的結果,在這種情況下,101的部分是非常好的匹配,並且與101S相同,如果你考慮它的部分。

在查看您的字段定義後,我不確定您是否在查詢時需要PorterStemFilterFactory,可能是將101s降至101?使用管理面板中的分析頁面檢查索引和查詢數據如何處理您的需求。

+0

我會嘗試刪除它並執行查詢,謝謝。 – OldTrain

+0

現在排名比較好,但仍然沒有(因爲第一個結果仍然是S101),我不得不通過查詢** UnTokenized字段**以獲得匹配的數字進入等級。 – OldTrain