如果没有为查询字符串查询指定字段,则使用_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
答案 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;
}
}