以下是获取完全匹配的查询

GET courses/_search
{
  "query": {
    "term" : {
         "name.keyword": "Anthropology 230"
      }
  }
}
我需要找到Anthropology 230Anthropology 250 also如何获得完全匹配

最佳答案

您正在执行的错误是您在关键字字段上使用了术语查询,并且没有对这两个查询都进行分析,这意味着它们试图在倒排索引中查找完全相同的搜索字符串。
您应该做的是:定义一个text字段,如果您尚未定义映射,则该字段仍然会存在。我还假设与查询中提到的.keyword相同,如果您未定义映射,它会自动创建。
现在,您可以仅使用下面的match query进行分析,并使用standard analyzer在空格上分割 token ,因此将为您的2个示例文档生成Anthropology 250230
简单高效的查询,将两个文档

{
    "query": {
        "match" : {
            "name" : "Anthropology 230"
        }
    }
}
和搜索结果
 "hits": [
      {
        "_index": "matchterm",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.8754687,
        "_source": {
          "name": "Anthropology 230"
        }
      },
      {
        "_index": "matchterm",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.18232156,
        "_source": {
          "name": "Anthropology 250"
        }
      }
    ]
上述查询与两个文档匹配的原因是,它创建了两个 token anthropology230,并且在两个文档中都匹配了anthropology
您绝对应该阅读analysis process,也可以尝试analyze API查看为任何文本生成的标记。
分析文本的API输出
POST http:// {{hostname}}:{{port}} / {{index-name}} / _analyze
{
  "analyzer": "standard",
  "text": "Anthropology 250"
}


{
    "tokens": [
        {
            "token": "anthropology",
            "start_offset": 0,
            "end_offset": 12,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "250",
            "start_offset": 13,
            "end_offset": 16,
            "type": "<NUM>",
            "position": 1
        }
    ]
}

07-28 00:01