您需要创建一个自定义分析器,该分析器使用char 过滤.
器将space
.
以下是创建上述分析器的设置。您可以使用分析API 来验证这一点。
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"replace_dots"
]
}
},
"char_filter": {
"replace_dots": {
"type": "mapping",
"mappings": [
". => \\u0020"
]
}
}
}
}
}
此分析器将为包含以下字段的字段创建以下标记testsite.com
{
"tokens": [
{
"token": "testsite",
"start_offset": 0,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "com",
"start_offset": 9,
"end_offset": 12,
"type": "<ALPHANUM>",
"position": 1
}
]
}
现在您需要在同一字段上使用查询,因为匹配查询被分析并使用相同的分析器,因此将生成标记下方match
的搜索文本。localhost.testsite.com
{
"tokens": [
{
"token": "localhost",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "testsite",
"start_offset": 10,
"end_offset": 18,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "com",
"start_offset": 19,
"end_offset": 22,
"type": "<ALPHANUM>",
"position": 2
}
]
}
现在,由于您的文档同时包含testsite
和com
标记,因此它将出现在搜索结果中。
如果您需要任何帮助来理解这一点,请告诉我。
编辑: - 一些了解分析过程的链接https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html