我们有一个具有以下配置的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”进行分组,并以这种方式返回每个数字的最佳匹配。但我需要的是一个自定义的评分/排序的结果的基础上的词在结果的顺序的正确性。所以对于“乔治·布什”的质疑,“乔治·布什”应该总是比“布什·乔治”得分更高。匹配短语搜索不适合我,因为我在搜索中使用模糊性。
像这样的东西怎么样:
"query":{
"simple_query_string": {
"query": "\"barack~ obama~\"~3",
"fields": ["name"]
}
},
标记后面的~
是fuzzy方面,短语后面的~3
处理slop,我想这就是短语查询中要找的概念。我认为结果会被打分,这样“巴拉克·奥巴马”的得分会高于“奥巴马·巴拉克”。您可以提出一个自定义的bool
查询来模拟这种情况,其中should子句同时处理模糊性和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,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让