Elasticsearch 显示搜索查询的文本字段术语

Elasticsearch show text field terms for search query

我有一个字段为 content 的索引,这是一个映射:

{
    "properties": {
        "content": {
            "type": "text",
            "analyzer": "english"
        }
    }
}

我有一个简单的搜索查询

curl -X GET 'localhost:9200/idx/_search'  -H 'content-type: application/json' -d '{
  "query": {
    "match": {
      "content": "yellow fox"
    }
  },
  "fields": [
    "content"
  ]
}'

{
   ...
   "hits" : {
      "hits" : [
         {
            ...
            "fields" : {
               "content" : [
                  "Yellow foxes jump"
               ]
            },
         }
   ...
}

如何修改我的搜索查询以同时接收 analyze API 提供的内容字词:

curl -X GET  127.0.0.1:9200/_analyze  -H 'content-type: application/json' -d '{ 
    "analyzer" : "english", 
    "text" : "yellow foxes"
}'

{
   "tokens" : [
      {
         "end_offset" : 6,
         "position" : 0,
         "start_offset" : 0,
         "token" : "yellow",
         "type" : "<ALPHANUM>"
      },
      {
         "end_offset" : 12,
         "position" : 1,
         "start_offset" : 7,
         "token" : "fox",
         "type" : "<ALPHANUM>"
      }
   ]
}

通常,搜索查询的期望输出如下所示

{
   ...
   "hits" : {
      "hits" : [
         {
            ...
            "fields" : {
               "content" : [
                  "Yellow foxes jump"
               ],
               "content_terms": [
                 "yellow", "fox", "jump"
               ]
            },
         }
   ...
}

您不必为搜索字词做任何特别的事情 - 因为您已经在做。当您在匹配查询中给出一个句子时 - 句子本身使用与索引相同的分析器进行标记化。

这意味着,如果查询是“quick brown fox”——它搜索“quick”“brown”“fox”;在短语查询的情况下 - ES 还将检查所有术语是否相近。