【发布时间】:2018-06-04 09:44:48
【问题描述】:
Elasticsearch 映射
PUT testindex
{
"settings": {
"analysis": {
"filter": {},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": []
}
},
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer",
"filter": ["lowercase"]
},
"hiphen_analyzer": {
"tokenizer": "whitespace",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"test": {
"properties": {
"catch_all": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"store": true,
"ignore_above": 256
},
"raw": {
"type": "text",
"store": true,
"analyzer": "hiphen_analyzer",
"search_analyzer": "whitespace"
},
"ngrams": {
"type": "text",
"store": true,
"analyzer": "my_analyzer"
}
}
},
"hostname": {
"type": "text",
"copy_to": "catch_all"
}
}
}
}
}
文件
POST testindex/test
{
"hostname": "server-testing-01"
}
POST testindex/test
{
"hostname": "Dell Poweredge 111"
}
我有诸如“server-testing-01”、“server-testing-02”、“Dell Poweredge Server”之类的服务器主机名。
在 elasticsearch 中创建了一个映射,其中一个名为 hostname 的字段为“text”,copy_to 字段为“catch_all”。
目前只有一个字段“主机名”,但其他字段也将复制到 catch_all 字段。
有一个全局搜索框可帮助客户搜索这些主机名和其他数据。
- 当搜索“test”时,结果应该有“server-testing-01”、“server-testing-02”。当搜索“power”时,结果应该有“Dell Poweredge Server”。搜索“edge”时,结果应为“Dell Poweredge Server”
- 当搜索确切的“server-testing-01”结果时,应该只包含一个结果。
编辑: 目前尝试了 ngram 自定义分析器,它为某些部分搜索提供了正确的结果,而不是全部。
有人可以在elasticsearch中如何实现部分搜索和精确搜索吗?
【问题讨论】:
标签: elasticsearch full-text-search n-gram