elasticsearch:_all和字段查询字符串查询

时间:2017-08-28 15:49:30

标签: elasticsearch

如果没有为查询字符串查询指定字段,则使用_all字段,该字段组合了可以查询的所有字段的值。

Q1:弹性使用创建_all字段时每个字段的映射中指定的分析器吗?

Q2:如果Q1的答案是肯定的,那么我不明白为什么在指定字段和搜索_all字段时会得到不同的结果。

我的映射如下所示:

settings: {
    analysis: {
        analyzer: {
            lowerCase: {
                tokenizer: 'whitespace',
                filter: ['lowercase']
            }
        }
    }
},
mappings: {
    entry: {
        properties: {
            id: { type: 'string' },
            type: { type: 'string', analyzer: 'lowerCase' },
            name: { type: 'string', analyzer: 'lowerCase' }
        }
    }
}

我搜索了一个特定的文档:

{
    id: "id1",
    type: "SCRIPT",
    name: "X-Mark 90"
}

当我搜索+type:*SCRIPT* +name:*X\-Mark*时,我会收到上述文件。但是,在搜索+*SCRIPT* +*X\-Mark*时,我没有得到任何结果。我不明白为什么。

我们使用的es版本是1.7

2 个答案:

答案 0 :(得分:2)

您的问题是关于

的分析器
_all

字段。

您的建议是type:*X-Mark*是一个搜索所有其他字段的虚拟字段。但_all实际上是lucene索引中的一个字段: Oracle

所以Q1的答案是"没有"。这意味着,*X-Mark* 会搜索子字符串" x-mark"在所有领域的标记"类型"但 _all会搜索短语" X Mark "。因为默认分析器会在" - "上分裂。可能的1.7不支持短语中的通配符......

因此,在您的情况下,您应该将字段gtk_widget_queue_draw()的分析器设置为" lowerCase"你会得到你所期望的。

在ES 5.X中,您可以按照与其他每个字段相同的方式指定分析仪。 https://www.elastic.co/guide/en/elasticsearch/reference/1.7/mapping-all-field.html

1.7可能是相同的。您也可以更改默认分析器。

通过" 默认" -Mapping: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/mapping-all-field.html https://www.elastic.co/guide/en/elasticsearch/reference/5.5/override-default-template.html

或通过"默认" -Analyzer https://www.elastic.co/guide/en/elasticsearch/reference/1.7/index-modules-mapper.html#_default_mapping

答案 1 :(得分:0)

我设法使用以下映射来解决它:

      for (let item of this.list) {
                if (item.pin.length == 2) {
                    var inTime = item.pin[0].time;
                    var outTime = item.pin[1].time;
                    var timeDuration = outTime - inTime;
                }
            }
相关问题