我有一个如下所示的ElasticSearch查询:
{
"query": {
"query_string": {
"query": "Lorem*",
"fields": ["search_names", "name^2"]
}
}
}
和像这样的文件作对。
{
"member_name" : "Lorem Ipsum",
"complaint_periods" : [
{
"period": "01/01/2001 - 31/12/2001",
"complaints": "10"
},
{
"period": "01/01/2002 - 31/12/2002",
"complaints": "0"
},
{
"period": "01/01/2003 - 31/12/2003",
"complaints": "3"
},
{
"period": "01/01/2004 - 31/12/2004",
"complaints": "100"
}
],
"search_names" : [
"Lorem Ipsum",
"dolor sit amet",
"varius augue",
"Aliquam fringilla"
]
}
因此,我能够根据文档名称和搜索名称与我的查询的接近程度来检索文档。
要求是,文本搜索框应该检索与查询匹配的最接近的名称,但是,如果给定相对相似的名称,在过去的时间段内投诉数量超过10的文档在搜索结果中的显示应该高于那些少于10的文档。
因此,我需要传递一个时间段的关键字,例如“01/01/2001-31/12/2001”,如果该时间段的投诉值>10,则增加文档得分。
当前索引映射如下所示。
"mappings": {
"properties": {
"member_name": {
"type": "text"
},
"search_names": {
"type": "text"
},
"complaint_periods": {
"type": "nested",
"properties": {
"period": {
"type": "text",
},
"complaints": {
"type": "integer"
}
}
}
}
}
我目前正在阅读嵌套查询作为一种可能的解决方案...但我对ES相当新鲜,所以我渴望获得关于我应该使用的查询/结构类型的意见。
有什么建议吗?
谢谢你。
因此,我似乎能够通过以下查询解决这个问题:
"query": {
"bool": {
"must": {
"query_string": {
"query": "Lorem*",
"fields": ["search_names", "member_name^2"]
}
},
"should": {
"nested" : {
"path" : "complaint_periods",
"query" : {
"bool" : {
"should" : [
{ "term" : {"complaint_periods.period" : "01/01/2001 - 31/12/2001"} }
]
}
}
}
}
}
}
我已经切换到使用布尔查询,因为根据文档
匹配匹配其他查询的布尔组合的文档的查询
因此,正如我所理解的,我的查询的第一部分指示结果“必须”包含与我的查询匹配的字符串中的两个字段之一。
第二部分是嵌套查询。虽然我的数据看起来是一个日期,但它实际上像一个类别一样存储和查询,所以我将complaint_period类型切换为'keyword'类型,而不是'text'类型。这允许我在“术语”查询中使用它(精确的文本匹配,分类)。
由于嵌套查询是“should”,结果不必匹配,但如果匹配,它应该提高分数,并将其推到结果列表的更高位置。
关于嵌套查询的文档也有一些示例,这些示例允许我根据投诉的数量进行改进,例如:
{ "range" : {"complaint_periods.complaints" : {"gt" : 5}} }
我稍后可能需要补充。
我看到一些关于嵌套字段和聚合的帖子,但它们似乎都没有回答我的问题。所以,如果这是一个重复的问题,请原谅,如果有任何帮助,我们将不胜感激。 我们建立了一个讲座索引,讲座具有以下特点: 讲座可以是面对面(现场)或预先录制(在线) 每个讲座可以有多个章节 这些章节中的每一个都可以由不同的讲师讲解(例如:量子物理的第一章可以由五个不同的讲师讲解,其中三个可能是现场直播,另外两个可能在线) 在线讲座每个讲师
我有映射: 和一些文件: 等等。 我尝试进行查询: 未找到任何结果。如果我尝试将同一查询按字段与其他类型(不是字符串,也没有原始子字段)一起使用,它会起作用。我应该如何为这种情况编写查询?谢谢 P、 美国字段“FieldA”具有子字段raw,因为我需要同时分析和不分析此字段
问题内容: 我想同时执行完全的单词匹配和部分的单词/子字符串匹配。例如,如果我搜索“男士剃须刀”,那么我应该能够在结果中找到“男士剃须刀”。但是,如果我搜索“剃须刀”,那么在结果中我也应该能够找到“剃须刀”。我使用以下设置和映射: 索引设置: 对应: 插入记录: 查询: 1.按完全匹配的词组进行搜索- >“男式” 上面的查询在返回结果中返回“男士剃须刀”。 2.按部分单词匹配搜索- >“ en’s
我是Elasticsearch的新手,我提出了一个问题,Elasticsearch嵌套查询是否只能为嵌套字段返回匹配的嵌套文档。 对于示例,我有一个名为的类型,其中嵌套字段名为 和嵌套查询 我需要的是搜索有提到足球的评论的博客文章,每个博客文章的评论数与足球相匹配(在例子中它数为1,因为另一个评论刚刚提到篮球)。 然而,Elasticsearch似乎总是返回完整的文档,所以我如何才能实现它,或者我
对于多值字段,如下所示: 此查询返回我们在上面插入的文档: 有没有办法让弹性单独匹配列表中的每个项目?我想让文档匹配“银行”、“美国”、“银行”、“游戏”、“加拿大”,但不匹配“微软游戏” 我不想使用嵌套文档或脚本
在这里给ElasticSearch的初学者排名。 我有一个客户列表,他们的订单作为一个嵌套字段。假设文档结构如下: 我想查询的是:在两个日期之间订购了一定数量的用户列表。我希望能够将它与例如生日的范围查询结合起来。 我已经到了这样的地步,我可以使用聚合来获得每个订户在两个日期之间的排序总和: 但是,我想限制查询部分返回的结果,以便更好地与所有其他过滤器混合。 我的第一个想法是使用一个脚本过滤器,并