Wilcard搜索或elasticsearch中的部分匹配

Wilcard搜索或elasticsearch中的部分匹配,第1张

Wilcard搜索或elasticsearch中的部分匹配

最有效的解决方案涉及利用ngram标记器来标记

name
字段的某些部分。例如,如果您有一个名称,如
petertomson
,则ngram令牌生成器将对它进行令牌化和索引,如下所示:

  • pe
    pet

    pete
    peter
    peter t
    peter to
    peter tom
    peter toms
    peter tomso
    eter tomson
    ter tomson
    er tomson
    r tomson
    tomson
    tomson
    omson
    mson
    son
    on

因此,将其编入索引后,搜索这些标记中的任何一个都会

peter thomson
在其中检索您的文档。

让我们创建索引:

PUT likequery{  "settings": {    "analysis": {      "analyzer": {        "my_ngram_analyzer": {          "tokenizer": "my_ngram_tokenizer"        }      },      "tokenizer": {        "my_ngram_tokenizer": {          "type": "nGram",          "min_gram": "2",          "max_gram": "15"        }      }    }  },  "mappings": {    "typename": {      "properties": {        "name": {          "type": "string",          "fields": { "search": {   "type": "string",   "analyzer": "my_ngram_analyzer" }          }        },        "type": {          "type": "string",          "index": "not_analyzed"        }      }    }  }}

然后,您将可以通过一个简单且非常有效的

term
查询进行如下搜索:

POST likequery/_search{  "query": {    "bool": {      "should": [        {          "term": { "name.search": "peter tom"          }        }      ],      "must_not": [        {          "match": { "type": "xyz"          }        },        {          "match": { "type": "abc"          }        }      ]    }  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4920732.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存