我想在ElasticSearch索引中使用match_phrase
查询在文本中找到字符串outlook.com
。但我不希望使用此查询获得something...@outlook.com
的结果:
GET /my_index/_search
{
"size": 1,
"query": {
"bool": {
"should": [],
"must": [
{
"match_phrase": {
"message": {
"query": "outlook.com",
"slop": 0
}
}
}
]
}
}
}
我认为这些结果是因为标准分析仪的标记器将something...@outlook.com
分离为[something...],[outlook.com]
,并将@
作为分隔符。
我试图将分析器whitespace
标记为[something...@outlook.com]
,并避免将完整的电子邮件作为结果。但使用此查询:
GET /my_index/_search
{
"size": 1,
"query": {
"bool": {
"should": [],
"must": [
{
"match_phrase": {
"message": {
"query": "outlook.com",
"slop": 0,
"analyzer": "whitespace",
}
}
}
]
}
}
}
仍然找到类似something...@outlook.com
的结果。我该怎么做?
更新:
我还尝试添加一个自定义分析器(等于一个空白):
PUT /my_index/_settings
{
"settings": {
"analysis": {
"analyzer": {
"email_analyzer": {
"tokenizer": "whitespace",
"filter": [
]
}
}
}
}
}
但是在搜索时在分析器中使用它不会改变任何东西
1条答案
按热度按时间ncecgwcz1#
您可以使用
regexp
查询而不是match_phrase
,如下所示: