我的solr中的文档已经编入索引。我想在轮胎中找到生产者和模特。
我有生成器和模型这样的文件:
Nokian;WR G2 SUV
Nokian;WR SUV
Nokian;V
查询:
((productname:"NOKIAN" OR producer:"NOKIAN") AND (productname:"V" OR description:"V" OR referencenumber:"V"))
但它找到了例如:
"2X NOKIAN 215/55 R17 94V LINE (3)"
因为在此产品中,速度索引为V
,此处模型为Line
。我的算法将此产品用于Nokian;V
而不是Nokian;Line
。
如何请求solr仅向我提供此V
周围没有任何其他字母的产品?
LETNIE 225/45/17 94V NOKIAN V FINLAND - PŁOTY
这发现很美。它的Nokian;V
。
答案 0 :(得分:0)
据我了解你的问题,你需要在每个布尔子句之前放置MUST量词。因此查询将如下所示:
(
+(productname:"NOKIAN" OR producer:"NOKIAN") AND
+(productname:"V" OR description:"V" OR referencenumber:"V")
)
答案 1 :(得分:0)
如果您的productname
字段属于text
类型,则其分析链中包含WordDelimiterFilter。此过滤器的默认行为之一是在字母数字边界上拆分术语,导致:
2X NOKIAN 215/55 R17 94V LINE (3)
生成以下令牌:
2 X NOKIAN 215 55 R 17 94 V LINE 3
(与查询中的“V”匹配)。
您始终可以运行debug=results
来获取有关某些内容匹配的原因的说明。我认为在这种特殊情况下,您可以为productname
字段构建另一种字段类型,以便较不积极地分析您的模型字符串。
答案 2 :(得分:0)
我解决了这个问题,整理了品牌,模型字典。我用自己的比较器。
public class MyComparer : IComparer<string>
{
int IComparer<string>.Compare(string x, string y)
{
if (x == y)
{
return 0;
}
if (x.Contains(y))
{
return -1;
}
else
{
return 1;
}
}
}
所有拥有V
或H
的模型现在都在Dcitionary的末尾。它的效果非常好。因为第一个solr搜索了Nokian;Line
并且找到了这个产品添加到其他列表alreadyFound
并跳过此产品找到的模型。谢谢大家的回复。