我有一个名为texts
该字段包含以下值:12/1
还有:1/12
问题是当我查询:texts:"1/*"
还发现12/1
就像斜杠没有任何意义。
如何按顺序限制结果?
(我尝试过texts:"1\/*"
,但是它没有用)
字段类型:
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
答案 0 :(得分:1)
问题是您使用的是TextField
类型,该类型执行文本的标记化,然后进行其他过滤,例如小写字母等。在您的情况下,您没有值{{ 1}},但第一个和第二个值都有两个值12/1
和12
,因此搜索1
将与两个记录都匹配,因为搜索将是对输入标记化后生成的值1/*
执行。
要防止字符串被标记化,您需要:
1
类型-但在这种情况下,字符串将按原样索引,不使用小写字母,等等。StrField
作为标记符,并添加相应的过滤器。您可以在DataStax documentation中阅读更多内容。另请注意,从版本6开始,solr.KeywordTokenizerFactory
数据的默认类型为text
,如果需要标记化等,则需要显式定义StrField
。