参照这里的例子 https://www.elastic.co/guide/en/elasticsearch/guide/current/ngrams-compound-words.htmlelasticsearch正克例如澄清
报价寻找“阿德勒”返回结果。 对“Adler”的搜索成为adl,dle和ler三个词的查询:
但为什么查询“Zdler”返回结果,即使zdl不是其中一个术语?
GET /my_index/my_type/_search
{
"query": {
"match": {
"text": {
"query": "zdler"
}
}
}
}
将匹配查询应用于“Adler”上的搜索将返回预期的记录。
但是,“Zdler”上的匹配查询也返回记录(因为dle和ler匹配)。即使设置“minimum_should_match”:“100%”返回该记录 - 预计不会
申请期限查询的“阿德勒”搜索返回什么 - 预计不会
POST /my_index/my_type/_search
{
"query": {
"term": {
"text": {
"value": "Adler"
}
}
}
}
如何实现返回只记录搜索“Adler”而不是“Zdler”?
"settings": {
"index": {
"number_of_shards": "5",
"provided_name": "my_index",
"creation_date": "1501069624443",
"analysis": {
"filter": {
"trigrams_filter": {
"type": "ngram",
"min_gram": "3",
"max_gram": "3"
}
},
"analyzer": {
"trigrams": {
"filter": [
"lowercase",
"trigrams_filter"
],
"type": "custom",
"tokenizer": "standard"
}
}
},
"number_of_replicas": "1",
"uuid": "Z5BXi_RjTACzTsR_-Nu9tw",
"version": {
"created": "5040099"
}
}
}
并且这些映射
{
"my_index": {
"mappings": {
"my_type": {
"properties": {
"text": {
"type": "text",
"analyzer": "trigrams"
}
}
}
}
很简单,因为'dle'和'ler'也匹配 – Val