【发布时间】:2018-11-30 10:43:16
【问题描述】:
我想在 ElasticSearch 中编写查询,该查询提供的结果包含搜索查询中的所有单词,但不仅作为完整单词,而且作为子单词。例如,如果我有具有以下值的 Document:
{
"first_name":"didier",
"last_name":"drogba"
}
我搜索“didi dro”,应该返回这个文件。如果我搜索“david drogba”,文档应该被忽略,因为它不包含单词“david”,即使是子词。 我使用 ngram tokenizer 进行了尝试,但无法达到我想要的效果。
我创建的索引
PUT doctors
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram"
}
}
}
}
}
然后添加映射
put doctors/_doc/_mapping
{
"properties": {
"first_name": {
"type": "text",
"analyzer": "my_analyzer"
},
"last_name": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
添加一些文档
post doctors/_doc/1
{
"first_name": "dito",
"last_name": "janelidze",
"specialism": "oftalmologist",
"location_name":"evex saburtalo clinic",
"brand": "Evex",
"address":"kavtaradze street N21"
}
我的搜索查询看起来像这样
get doctors/_doc/_search
{
"query": {
"multi_match": {
"query": "david jane",
"fields": ["first_name", "last_name"]
}
}
}
它给了我我插入的文档,但我不需要它,因为它不包含单词“david”
【问题讨论】:
-
您能分享您尝试过的查询吗?这可以使用 Ngram Tokenizer。所需要的只是一个带有两个
match子句(first_name 和last_name 各一个)的bool must查询。 -
我已经更新了我的问题,添加了一些来自 kibana 的命令,希望你明白 ai 到底想要实现什么
-
为您的多重匹配查询添加参数
"operator": "and"
标签: elasticsearch search