Solr 忽略斜杠顺序
Solr ignoring slash order
我有一个名为的索引字段:texts
该字段包含如下值:12/1
还有:1/12
问题是当我查询:texts:"1/*"
它还发现 12/1
好像斜线没有任何意义。
如何按顺序限制结果?
(我已经试过 texts:"1\/*"
但它不起作用)
字段类型:
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
问题是您使用的 TextField
类型执行文本标记化,然后进行额外的过滤,例如小写等。在您的情况下,您没有价值12/1
在您的索引中,但是对于第一个和第二个值,您有 2 个值,12
和 1
,因此您搜索 1/*
将匹配两个记录,因为搜索将针对输入标记化后生成的值 1
执行。
要防止字符串被标记化,您需要:
- 要么使用
StrField
类型代替 - 但在这种情况下,字符串将按原样索引,没有小写等
- 如果你想有小写等,然后为你的字段定义一个新类型,但使用
solr.KeywordTokenizerFactory
作为分词器,并添加相应的过滤器。
您可以在 DataStax documentation 中阅读更多内容。另请注意,从版本 6 开始,text
数据的默认类型为 StrField
,如果需要标记化等,则需要明确定义 TextField
。
我有一个名为的索引字段:texts
该字段包含如下值:12/1
还有:1/12
问题是当我查询:texts:"1/*"
它还发现 12/1
好像斜线没有任何意义。
如何按顺序限制结果?
(我已经试过 texts:"1\/*"
但它不起作用)
字段类型:
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
问题是您使用的 TextField
类型执行文本标记化,然后进行额外的过滤,例如小写等。在您的情况下,您没有价值12/1
在您的索引中,但是对于第一个和第二个值,您有 2 个值,12
和 1
,因此您搜索 1/*
将匹配两个记录,因为搜索将针对输入标记化后生成的值 1
执行。
要防止字符串被标记化,您需要:
- 要么使用
StrField
类型代替 - 但在这种情况下,字符串将按原样索引,没有小写等 - 如果你想有小写等,然后为你的字段定义一个新类型,但使用
solr.KeywordTokenizerFactory
作为分词器,并添加相应的过滤器。
您可以在 DataStax documentation 中阅读更多内容。另请注意,从版本 6 开始,text
数据的默认类型为 StrField
,如果需要标记化等,则需要明确定义 TextField
。