[英]Solr Shingle Is Not Visible In Debug Query
我正在尝试使用Solr在用户搜索中找到类别的完全匹配(eg "skinny jeans" in "blue skinny jeans")
。 我使用以下类型定义:
<fieldType name="subphrase" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="\ "
replacement="_"/>
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory"
outputUnigrams="true"
outputUnigramsIfNoShingles="true"
tokenSeparator="_"
minShingleSize="2"
maxShingleSize="99"/>
</analyzer>
</fieldType>
该类型将索引类别而不进行标记,仅使用下划线替换空格。 但它会将查询标记化并将它们整理(带下划线)。
我想要做的是将查询带状疱疹与索引类别相匹配。 在Solr Analysis页面中,我可以看到空格/下划线替换在索引和查询上都有效,我可以看到查询正在被正确拼接(下面的屏幕截图):
我的问题是在Solr Query页面中,我看不到生成的带状疱疹,我认为结果类别“紧身牛仔裤”不匹配,但类别“牛仔裤”匹配:(
这是调试输出:
{
"responseHeader": {
"status": 0,
"QTime": 1,
"params": {
"q": "name:(skinny jeans)",
"indent": "true",
"wt": "json",
"debugQuery": "true",
"_": "1464170217438"
}
},
"response": {
"numFound": 1,
"start": 0,
"docs": [
{
"id": 33,
"name": "jeans",
}
]
},
"debug": {
"rawquerystring": "name:(skinny jeans)",
"querystring": "name:(skinny jeans)",
"parsedquery": "name:skinny name:jeans",
"parsedquery_toString": "name:skinny name:jeans",
"explain": {
"33": "\n2.2143755 = product of:\n 4.428751 = sum of:\n 4.428751 = weight(name:jeans in 54) [DefaultSimilarity], result of:\n 4.428751 = score(doc=54,freq=1.0), product of:\n 0.6709952 = queryWeight, product of:\n 6.600272 = idf(docFreq=1, maxDocs=541)\n 0.10166174 = queryNorm\n 6.600272 = fieldWeight in 54, product of:\n 1.0 = tf(freq=1.0), with freq of:\n 1.0 = termFreq=1.0\n 6.600272 = idf(docFreq=1, maxDocs=541)\n 1.0 = fieldNorm(doc=54)\n 0.5 = coord(1/2)\n"
},
"QParser": "LuceneQParser"
}
}
很明显,parsedquery参数不会显示带状疱疹的查询。 我需要做些什么才能完成将查询带状疱疹与索引值匹配的过程? 我觉得我非常接近解决这个问题。 任何建议表示赞赏!
这是一个不完整的答案,但它可能足以让你感动。
1:你可能想要outputUnigrams="false"
,所以你不能在查询“紧身牛仔裤”上匹配类别“jeans”
2:你实际上确实想要使用引号,(一个短语)进行搜索,否则该字段将不会看到多个令牌。
3:看起来你正试图和这个人做同样的事情: http : //comments.gmane.org/gmane.comp.jakarta.lucene.user/34746
该线程看起来像导致包含PositionFilterFactory https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PositionFilterFactory
如果您使用的是Solr <5.0,请尝试将其放在查询时间分析的末尾,看看它是否有效。
不幸的是,该过滤器工厂已在5.0中删除。 这是我发现的关于该做什么的唯一评论: http : //lucene.apache.org/core/4_10_0/analyzers-common/org/apache/lucene/analysis/position/PositionFilter.html
我玩了一下autoGeneratePhraseQueries
,但我还没有找到另一种方法来阻止Solr生成MultiPhraseQuery。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.