Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr返回top rank与101项不完全匹配,返回S101_Solr_Search Engine_Solrnet - Fatal编程技术网

Solr返回top rank与101项不完全匹配,返回S101

Solr返回top rank与101项不完全匹配,返回S101,solr,search-engine,solrnet,Solr,Search Engine,Solrnet,我有电子商务索引数据,字段名为PartNumber(项目编号),数据每天刷新 solr中的字段类型为文本,因为该字段可能包含数字、字符或特殊字符,如破折号 当我使用以下术语搜索时: 192.168.x.x:xx/solr/keyword/select?q=(零件号:101)^2.0+或+(101)&start=0&rows=20&spellcheck=true&version=2.2&debug=true&fl=*,分数 查询结果返回:前20行: S101 1014 101 101S 101U

我有电子商务索引数据,字段名为PartNumber(项目编号),数据每天刷新

solr中的字段类型为文本,因为该字段可能包含数字、字符或特殊字符,如破折号

当我使用以下术语搜索时:

192.168.x.x:xx/solr/keyword/select?q=(零件号:101)^2.0+或+(101)&start=0&rows=20&spellcheck=true&version=2.2&debug=true&fl=*,分数

查询结果返回:前20行:

  • S101
  • 1014
  • 101
  • 101S
  • 101U
我尝试了PartNumber:“101”和101,但在101不是排名靠前的地方,总是返回相同的结果。

注意:如果术语为4个或更多字符(500016400、K5125等),则顶部结果更好,通常精确匹配为第一个

一些调试结果:


(零件号:101)^2.0或(101)(零件号:101)^2.0或(101)
短语查询(零件号:“110 101”^2.0)短语查询(文本:“110 101”)
零件号:“1 10 101”^2.0文本:“1 10 101”
6.7604995=(匹配)以下各项之和:
5.1748066=(匹配)重量(零件号:“110101”^2.0 in 492450)[默认相似性],结果:
5.1748066=分数(doc=492450,freq=1.0=短语freq=1.0
),产品为:
0.91124594=查询重量,产品:
2.0=增压
11.357651=idf(),总和:
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=492450中的现场重量,产品:
1.0=tf(频率=1.0),频率为:
1.0=短语频率=1.0
11.357651=idf(),总和:
1.5469646=idf(docFreq=797168,maxDocs=1377508)
3.6602204=idf(docFreq=96332,maxDocs=1377508)
6.1504664=idf(docFreq=7984,maxDocs=1377508)
0.5=现场规范(doc=492450)
1.5856929=(匹配)权重(492450中的文本:“110 101”)[默认相似性],结果:
1.5856929=分数(doc=492450,freq=4.0=短语freq=4.0
),产品为:
0.4118627=查询重量,产品:
10.266806=idf(),总和:
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=492450中的现场重量,产品:
2.0=tf(频率=4.0),频率为:
4.0=短语频率=4.0
10.266806=idf(),总和:
1.407141=idf(docFreq=916800,maxDocs=1377508)
3.1487658=idf(docFreq=160655,maxDocs=1377508)
5.7108994=idf(docFreq=12392,maxDocs=1377508)
0.1875=现场规范(doc=492450)

在不知道您的PartNumber字段定义的情况下,我的推测性回答是,您似乎在基于ngram类型的分析进行索引和查询。如果你需要使用ngram,那很好,在索引过程中使用它。但是在查询时分析过程中,ngram可以给出这种类型的结果,在本例中,101的各个部分都是非常好的匹配,如果您从各个部分来考虑的话,它们与101S是相同的


在查看了字段定义之后,我不确定在查询期间是否需要PorterStemFilterFactory,可能它正在从101降到101?使用“管理”面板中的“分析”页面检查索引和查询数据是如何根据您的需要处理的。

PartNumber的字段类型和定义是什么,看起来问题不在您的查询中。它似乎与在索引和查询期间如何分析字段(是否使用ngram等)有关。字段类型为文本,与fiters的默认值相同:标记化器:在索引中:StopFilterFactory、WordDelimiterFilterFactory、LowerCaseFilterFactory、KeywordMarkerFilterFactory、PorterStemFilterFactory、,查询中的RemovedUpplicateStokenFilterFactory:WhitespaceTokenizerFactory、同义词FilterFactory、StopFilterFactory、WordDelimiterFilterFactory、LowerCaseFilterFactory、关键字MarkerFilterFactory、PorterStemFilterFactory、RemovedUpplicateStokenFilterFactory查看我的更新答案。排名现在有所改善,但仍然没有达到应有的水平(
第一个结果仍然是S101
),我必须通过未排序的字段进行查询,以便将匹配的数字输入到列组中。
<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>