如何获取使用DSL的精确匹配

How to get the exact match of using DSL

映射如何对查找搜索起作用??

获取courses/_search

return低于

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0226655,
    "hits" : [
      {
        "_index" : "courses",
        "_type" : "classroom",
        "_id" : "7",
        "_score" : 1.0226655,
        "_source" : {
          "name" : "Computer Internals 250",
          "room" : "C8",
          "professor" : {
            "name" : "Gregg Va",
            "department" : "engineering",
            "facutly_type" : "part-time",
            "email" : "payneg@onuni.com"
          },
          "students_enrolled" : 33,
          "course_publish_date" : "2012-08-20",
          "course_description" : "cpt Int 250 gives students an integrated and rigorous picture of applied computer science, as it comes to play in the construction of a simple yet powerful computer system. "
        }
      },
      {
        "_index" : "courses",
        "_type" : "classroom",
        "_id" : "4",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "Computer Science 101",
          "room" : "C12",
          "professor" : {
            "name" : "Gregg Payne",
            "department" : "engineering",
            "facutly_type" : "full-time",
            "email" : "payneg@onuni.com"
          },
          "students_enrolled" : 33,
          "course_publish_date" : "2013-08-27",
          "course_description" : "CS 101 is a first year computer science introduction teaching fundamental data structures and algorithms using python. "
        }
      }
    ]
  }
}

映射如下

{
  "courses" : {
    "mappings" : {
      "properties" : {
        "course_description" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "course_publish_date" : {
          "type" : "date"
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "professor" : {
          "properties" : {
            "department" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "email" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "facutly_type" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "room" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "students_enrolled" : {
          "type" : "long"
        }
      }
    }
  }
}

我需要return精确匹配词组professor.name=Gregg Payne

我按照 https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html

的指示尝试了以下查询
GET courses/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "professor.name" : "Gregg Payne"
                }
            }
        }
    }
}

根据您的映射,这是适合您的查询 -

POST http://localhost:9200/courses/_search

{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "professor.name.keyword" : "Gregg Payne"
                }
            }
        }
    }
}

在评论中回答您的问题 - 搜索始终与映射有关 :) 在您的情况下,您使用 术语查询,它是关于搜索精确值的,它需要一个关键字字段。 Text fields get analyzed:

Avoid using the term query for text fields.

By default, Elasticsearch changes the values of text fields as part of analysis. This can make finding exact matches for text field values difficult.

To search text field values, use the match query instead