当前位置: 首页 > 知识库问答 >
问题:

如何实现DSL的精确匹配

水渊
2023-03-14

返回在下面

{
  "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"
        }
      }
    }
  }
}

我尝试从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"
                }
            }
        }
    }
}

共有1个答案

谢英光
2023-03-14

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

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

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

在注释中回答您的问题-搜索总是关于映射:)在您的例子中,您使用术语查询,它是关于搜索准确的值,它需要一个关键字字段。文本字段得到分析:

避免对文本字段使用术语查询。

 类似资料:
  • 问题内容: 我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision A”,“ vision B”,“ xx版本”,“ vision”等结果。 我想要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是: 我检查了Elasticsearch匹配精确术语其中识别出将“索引”

  • 我试图检查字符串是否包含完全匹配。例如: String str="这是我的字符串,具有-Policy和-p" 我怎样才能做到以下几点:

  • 我正在使用elasticsearch从json字段进行精确短语匹配。我尝试过多种语法,比如multi_match、query_string query_string我正在使用的语法; 我也尝试了过滤器而不是查询,但是过滤器在json上没有给出任何结果。我用于过滤器的语法是; 现在的问题是; 是否可以使用elasticsearch对json执行精确匹配操作?

  • 本文向大家介绍MongoDB精确数组匹配,包括了MongoDB精确数组匹配的使用技巧和注意事项,需要的朋友参考一下 对于精确的数组匹配,只需在MongoDB中使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 这是对MongoDB数组匹配的查询- 这将产生以下输出-

  • 我正在尝试创建一个Lucene4.10索引。我只想在索引中保存我放入文档的确切字符串,witout标记化。 我在用StandardAnalyzer。 我试图搜索术语“燃料箱容量”@en(包括引号),所以我试图省略它们,并在术语周围添加了另外几个引号,以便让lucene理解我正在搜索整个文本。 如果我打印查询,我会得到:3:“燃料箱容量en”,但我不想拆分@符号上的文本。 我认为我的第一个问题是St

  • 我目前正在Java应用程序上使用MongoDB的驱动程序。假设我将以下两个文档存储在一个集合中: 文件A: 文件B: 现在,我想通过使用key1和key2的值从集合中检索DocumentB的精确匹配,而不返回documenta,而不是_id,因为我事先不知道它。 如果我只是使用DocumentB作为查询(没有_id),Mongo也将返回DocumentA,因为它匹配所有的键和值,不考虑Docume