我有与此处讨论的基本相同的问题:Solr wildcard query with whitespace,但未回答此问题。
我在名为“brand”的字段的过滤器查询中使用通配符。
当品牌名称中包含空格时,我遇到了麻烦。例如,当我说fq = {!tag = brand} brand:Lexing * n时,过滤品牌“Lexington”的效果很好。但是,像“Athentic Models”这样的多词品牌会引起问题。似乎必须在名称两边加上双引号。
如果有“s”,则* s不执行任何操作,即品牌:“Athentic Mode *”或品牌:“Lexingt *”,将不匹配任何内容。如果没有双引号,则可以说出brand:Authen *,没有引号,没有空格,并且可以与Authentic型号匹配。但是,一旦在品牌名称中包含空格,则在匹配时似乎只考虑字符串到第一个空格为止。
品牌领域是类型
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
据我了解,这不是空白标记。但是,它使用来自空白标记化字段的copyField填充。
我可以做些什么来阻止Solr在不使用双引号的情况下对过滤器查询进行标记化吗?
最佳答案
就像罗布(Rob)在回答中所说的那样,我在他链接的问题上贴了an answer on my own。
您需要做的就是在查询中转义空格(例如customer_name:Pop *Tart
-> customer_name:Pop\ *Tart
)。
根据我的经验,无论您将通配符放在何处,此方法都有效,这由Solr如何声明类似以下内容来支持:
customer_name:Pop\ *Tart
解析为:
customer_name:Pop *Tart
关于Solr:对带空格的字符串使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378872/