我们的映射如下所示:
mappings: {
entry: {
properties: {
id: { type: 'string' },
name: { type: 'string' },
creationTimestamp: { type: 'date', format: 'date_time' },
lastTimestamp: { type: 'date', format: 'date_time' }
}
}
}
有些文档在名称中包含@符号,例如“@ TITLE @ _30”。但是,我无法搜索@符号。搜索name:*title*
或name:*_30*
工作正常,但在尝试name:*@title*
时,我没有收到任何结果。
我必须使用哪种标记器才能实现这一点?我们的最终用户想要做的只是使用通配符进行不区分大小写的搜索。
修改
查询如下所示:
query: {
filtered: {
filter: {
bool: {
must: [{
range: {
creationTimestamp: {
gte: startdate.toISOString(),
lte: enddate.toISOString()
}
},
query: {
query_string: {
query: 'name:*title*' // e.g
}
}
}]
}
}
}
}
P.S。我们使用es v1.7
编辑2 尝试了How to modify standard analyzer to include #?中的两个选项,但它们对我不起作用。
还尝试了以下内容:
settings: {
analysis: {
analyzer: {
name_analyzer: {
type: 'custom',
tokenizer: 'whitespace',
filter: ['test']
}
},
filter: {
test: {
type: 'word_delimiter',
preserve_original: true,
type_table: ['@ => ALPHANUM']
}
}
}
}
但这只会获得name:*@*
的结果,而其他任何查询都不起作用