Elasticsearch“开始with”完整单词

xpcnnkqh  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(1)|浏览(92)

我的ElasticSearch索引#1中有两个文档:姓名:无名氏,吉米·史密斯#2:姓名:John威廉姆斯
我正在尝试制定一个查询,可以帮助我匹配的名字或全名,规则是:
1.如果输入是John,则查询应返回doc#1和#2
1.如果输入是Jimmy,那么查询应该返回doc#1
1.如果输入是Doe,那么查询应该什么也不返回
1.如果输入是John威廉姆斯,那么查询应该返回doc#2
1.如果输入是John Jim,那么查询应该什么也不返回
任何形式的帮助都很感激。
我已经尝试了关键字匹配和匹配短语前缀,但他们都没有工作,因为我的预期

wgx48brx

wgx48brx1#

然后,您可以使用keyword字段和prefix查询,如下所示:

POST test/_doc
{
  "names": ["John Doe", "Jimmy Smiths"]
}
POST test/_doc
{
  "names": ["John Williams"]
}

# Returns both docs
POST test/_search
{
  "query": {
    "prefix": {
      "names.keyword": {
        "value": "John",
        "case_insensitive": true
      }
    }
  }
}

# Returns first doc
POST test/_search 
{
  "query": {
    "prefix": {
      "names.keyword": {
        "value": "Jimmy",
        "case_insensitive": true
      }
    }
  }
}

# Returns nothing
POST test/_search 
{
  "query": {
    "prefix": {
      "names.keyword": {
        "value": "Doe",
        "case_insensitive": true
      }
    }
  }
}

# Returns second doc
POST test/_search 
{
  "query": {
    "prefix": {
      "names.keyword": {
        "value": "John Williams",
        "case_insensitive": true
      }
    }
  }
}

# Returns nothing
POST test/_search 
{
  "query": {
    "prefix": {
      "names.keyword": {
        "value": "John Jim",
        "case_insensitive": true
      }
    }
  }
}

相关问题