我定义了一个我没有内置的自定义分析器。
analyzer": {
"keyword_lowercase": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
然后我对这个字段的映射是:
"email": {
"type": "string",
"analyzer": "keyword_lowercase"
}
这很有效。 (http://.../_analyze?field=email&text=me@example.com) - >
"tokens": [
{
"token": "me@example.com",
"start_offset": 0,
"end_offset": 16,
"type": "word",
"position": 1
}
]
通过该关键字查找效果很好。 http://.../_search?q=me@example.com会产生结果。
问题是尝试在查询字符串查询中的任何位置合并通配符。 http://.../_search?q=*me@example.com会产生没有结果。我希望结果包含电子邮件,例如" me@example.com"和" some@example.com"。
看起来elasticsearch使用默认分析器执行搜索,这没有意义。它不应该使用每个字段自己的默认分析器执行搜索吗?
即。 http://.../_search?q=email:*me@example.com返回结果,因为我告诉它根据字段使用哪个分析器。
弹性搜索可以不这样做吗?
答案 0 :(得分:3)
将analyze_wildcard
设置为true
,默认为false
。