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

elasticsearch中单词正确排序的评分结果

宰父宾实
2023-03-14

我们有一个具有以下配置的elasticsearch索引:

PUT phonebook
{
   "settings":{
      "index":{
         "number_of_shards":8,
         "number_of_replicas":1
      }
   },
   "mappings":{
      "person":{
         "_all":{
            "enabled":false
         },
         "_source":{
            "enabled":true
         },
         "properties":{
            "id":{
               "type":"long"
            },
            "name":{
               "type":"text",
               "index_options":"positions"
            },
            "number":{
               "type":"long"
            }
         }
      }
   }
}
GET /contacts/contact/_search
{
   "size":0,
   "query":{
      "match":{
         "name":{
            "fuzziness":1,
            "query":"george bush",
            "operator":"and"
         }
      }
   },
   "aggs":{
      "by_number":{
         "terms":{
            "field":"number",
            "size":10,
            "order":{
               "max_score":"desc"
            }
         },
         "aggs":{
            "max_score":{
               "max":{
                  "script":"_score"
               }
            },
            "sample":{
               "top_hits":{
                  "size":1
               }
            }
         }
      }
   }
}

结果按字段“number”进行分组,并以这种方式返回每个数字的最佳匹配。但我需要的是一个自定义的评分/排序的结果的基础上的词在结果的顺序的正确性。所以对于“乔治·布什”的质疑,“乔治·布什”应该总是比“布什·乔治”得分更高。匹配短语搜索不适合我,因为我在搜索中使用模糊性。

共有1个答案

芮立果
2023-03-14

像这样的东西怎么样:

  "query":{
    "simple_query_string": {
      "query": "\"barack~ obama~\"~3",
      "fields": ["name"]
    }    
  },

标记后面的~是fuzzy方面,短语后面的~3处理slop,我想这就是短语查询中要找的概念。我认为结果会被打分,这样“巴拉克·奥巴马”的得分会高于“奥巴马·巴拉克”。您可以提出一个自定义的bool查询来模拟这种情况,其中should子句同时处理模糊性和slop方面。

一些资源:

  • 简单查询字符串
  • 混合起来-slop上的弹性搜索文档
 类似资料:
  • 我的索引中有以下类型的文档,但由于深度嵌套方面,我找不到正确排序的方法。 文档示例: 我希望排序或提升在匹配时间,以便我可以得到排序的文档(asc/desc)与约束和内嵌套文档和内嵌套文档

  • 问题内容: 我正在ElasticSearch中实现自动完成索引,并且遇到了排序/评分问题。假设索引中包含以下字符串: 当我搜索“甜甜圈”时,我希望结果按术语位置来排序,如下所示: 我不知道如何做到这一点。字词排名未纳入默认的评分逻辑,而且我找不到找到方法。似乎很简单,尽管以前其他人也必须遇到这个问题。有人知道吗? 谢谢! 问题答案: 根据安德烈(Andrei)的答案,这是我最终得到的解决方案,并扩

  • 问题内容: 我希望能够以一定顺序返回预输入项。例如,搜索应返回: 1)以搜索词para开头的建议应在顶部并按字母顺序排列 2)其余项目应按字母顺序显示在下方 Elasticsearch有可能吗? 更新资料 如果我希望输出像这样: 因此,所有包含前缀的术语都位于顶部,其他所有术语均按字母顺序排列。 问题答案: 这是我的建议(同样,您需要启用脚本): 更新 对于您的更新问题, 即使我希望再发表一则文章

  • 我刚开始使用Lucene,并试图了解如何使用Lucene实现更简单的评分函数。 对于查询,我想要一个排序,其中的排序高于和。

  • 我使用elasticsearch在我的类型中搜索多个数组字段,看起来像 然后我使用multi\u match查询来获取匹配项 当计算t1的分数时,elasticsearch将字段1、字段2和字段3中的查询分数相加,这正是我想要的。然而,他们的贡献并不相等,字段3对得分的贡献最大,因为“foo”在那里多次出现。 我现在想通过不将所有数组条目的分数相加,而是取最大值来计算每个数组字段中的分数。在我的示

  • 我正在尝试自己编程气泡排序、选择排序和插入排序。但是,我在插入排序方面遇到了麻烦。我会提供我的代码以及每行在做什么 好的,所以int count是找出排序数组的起始位置。然后我声明了index以查找将元素放在排序数组之后的位置,并为未排序数组的第一个元素声明了一个临时int,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让