Solr返回top rank与101项不完全匹配,返回S101
我有电子商务索引数据,字段名为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行: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
- S101
- 1014
- 101
- 101S
- 101U
(零件号: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>