当前位置: 首页 > 面试题库 >

Elasticsearch:精确匹配的排名如何?

宗政元青
2023-03-14
问题内容

我想在一个字段中搜索“ vision”项目,但是通过在DSL中使用match / match_phrace / term,我只得到了“ vision
A”,“ vision B”,“ xx版本”,“ vision”等结果。

我想要的是精确匹配“视觉”应该获得最高分,而包含“视觉”的项目应该排在精确匹配之后。排名应该是:

vision > vision A > vision B > xx version

我检查了Elasticsearch匹配精确术语其中识别出将“索引”更改为“not_analyzed”即可实现精确匹配。但是在我的情况下,不仅需要完全匹配,还需要包含匹配。

在这种情况下我该怎么办?谢谢!


问题答案:

您可以做到的是在q bool/should查询中包含一些约束以控制排名。

{
  "query": {
    "bool": {
      "must": {
        "match": {
          "name": "vision"                  <--- match on vision
        }
      },
      "should": [
        {
          "term": {
            "name.keyword": {               <--- boost exact matches on keyword field (i.e. "vision")
              "value": "vision",
              "boost": 3
            }
          }
        },
        {
          "prefix": {
            "name.keyword": {               <--- boost prefix matches on keyword field (i.e. "vision A" and "vision B"
              "value": "vision",
              "boost": 2
            }
          }
        }
      ]
    }
  }
}
  • 第一个子句将匹配visionname字段中包含的所有文档。
  • 第二个子句将进一步提高其name.keyword字段精确包含的文档visionname.keyword通常是一个keyword字段(以前是一个not_analyzed string字段)。
  • 第三子句将对name.keyword字段以开头的文档提供更高的提升vision


 类似资料:
  • 问题内容: 有没有办法让ElasticSearch在分析的字段上识别完全匹配?理想情况下,我想小写,标记化,词干化,甚至对我的文档进行语音化,然后让查询提取“精确”匹配项。 我的意思是,如果我索引“汉堡包”和“汉堡包”,它们将被分析为[“汉堡包”,“小圆面包”]和[“汉堡包”]。如果我搜索“汉堡”,它将仅返回“汉堡”文档,因为这是“完全匹配”。 我尝试使用关键字标记器,但不会阻止各个标记。我是否需

  • 返回在下面 我尝试从https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html按方向进行以下查询

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

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

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

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