Solr的:与空白的字符串使用通配符(Solr: Using a wildcard on a str

2019-09-22 07:31发布

我基本上是在这里讨论同样的问题: Solr的通配符查询与空白 ,但是这问题不好回答。

我用了一个叫做字段筛选查询通配符“品牌”。

我在遇到麻烦的时候,品牌的名字在它的空格。 {!标签=品牌}:乐行* N例如,过滤品牌“列克星敦”当我说FQ =品牌工作正常。 多字品牌,如“Athentic模式”导致的问题,但是。 看来双引号必须包含周围的名称。

当有“S * S没有做任何事情,即品牌:” Athentic模式*”或品牌:‘Lexingt *’,不会匹配任何没有双引号的,它的工作说品牌:认证介绍*不带引号,没有空间,将匹配正品模式。但是一旦空白包含在品牌名称,似乎匹配时,只考虑串到第一空间。

品牌字段类型

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

这是不是空白标记化,我的理解。 它会填充一个空白标记化领域的copyField,虽然。

有什么我可以做,以从标记化而没有使用双引号过滤查询停止Solr的?

Answer 1:

就像罗布在他回答说,我已经张贴的答案我自己对他联系的问题。

所有你需要做的就是逃避查询的空间(如, customer_name:Pop *Tart - > customer_name:Pop\ *Tart )。 从我的经验,这种方法可行无论你在哪里放置通配符,这是怎样的Solr宣称备份的东西,如:

customer_name:Pop\ *Tart

被解析为:

customer_name:Pop *Tart


Answer 2:

尝试从字符串类型更改为类似的文字。 字符串类型没有标记化,所以当有一个字符串领域的空白,它会尝试匹配您的查询,包括在该领域中的空白。

在默认模式文件,你可以看到正上方的字符串字段类型这一行

<!-- The StrField type is not analyzed, but indexed/stored verbatim. -->

使用文本类型应该解决您的问题,像text_general或类似的一个。



Answer 3:

我添加了一个可能的解决方案回到原来的问题与空白Solr的通配符查询

注意尾随通配符这仅适用。 我知道这个问题的例子使用字符串中通配符,但它有助于回答点问题的具体情况。

基本上,这相当于使用FieldQParserPlugin查询分析器。 检查我的更多细节原来的问题后,所以我不为重复自己得到蔑视。



文章来源: Solr: Using a wildcard on a string with whitespace