Solr:对带空格的字符串使用通配符

标签 solr lucene wildcard

我有与此处讨论的基本相同的问题: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/

相关文章:

java - Solr Filter Cache(FastLRUCache)占用内存过多导致内存不足?

lucene - Elasticsearch 总是返回 "mapping type is missing"

google-sheets - Google 电子表格,计数 IF 包含字符串

Java 泛型 : wildcard and type parameter syntax when defining generic class

java - 在solr中添加自定义字段类型

security - 解决方案异常 : Error loading class 'solr.RunExecutableListener' + '/var/tmp/sustes' process

java - Solrj NoClassDefFoundError

java - 如何使用 Lucene 搜索不包含术语的文档?

apache - 集成 Solr 和 Mahout

Python - 来自套接字数据的正则表达式通配符?