我有一个相当复杂的查询,现在我想增加一些满足某些条件的文档。我有以下简化的文档结构,我尝试给一些文档一个基于id,类型,标签的提升。
{
"id": 123,
"genres": ["ACTION", "DRAMA"],
"tags": ["For kids", "Romantic", "Nature"]
}我想做的就是举个例子
id: 123 boost: 5
genres: ACTION boost: 3
tags: Romantic boost: 0.2并将包含在我的查询中并符合条件的所有文档推进,但我不想过滤掉它们。所以,我想,查询子句的增加没有任何帮助。
编辑:如果更容易理解我想要达到的目标(不确定是否可以使用elasticsearch,no也是一个有效的答案)。
我想使用查询进行搜索,并获得一个结果集。在这一组中,我想增加一些文档。但我不想扩大结果集或过滤它。提升应该独立于查询。
例如,我搜索一个特定的标记,并希望在结果集中提升所有带有类别“ACTION”的文档。但我不希望结果集中有类别'ACTION‘的所有文档,也不想只需要带有特定标记和类别'ACTION’的文档。
发布于 2017-07-06 09:33:36
我找到了一个解决办法,而且很简单。我用的是增强查询。我现在只是嵌套不同的提升标准和我原来的查询现在是基本的查询。
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-boosting-query.html
例如:
{
"query": {
"boosting": {
"positive": {
"boosting": {
"positive": {
"match": {
"director": "Spielberg"
}
},
"negative": {
"term": {
"genres": "DRAMA"
}
},
"negative_boost": 1.3
}
},
"negative": {
"term": {
"tags": "Romantic"
}
},
"negative_boost": 1.2
}
}
}发布于 2017-06-27 07:32:43
我认为您需要在查询期间进行动态增强。
第一个匹配id标题与boost,第二个匹配‘性别’动作。
{
"query": {
"bool": {
"should": [
{
"match": {
"title": {
"query": "id",
"boost": 5
}
}
},
{
"match": {
"content": "Action"
}
}
]
}
}
}如果希望基于查询进行multi_match匹配:
{
"multi_match" : {
"query": "some query terms here",
"fields": [ "id^5", "genders^3", "tags^0.2" ]
}
}注:^5表示标题的升压。
编辑:可能是从ES参考指南中询问不同类型的multi_match查询(至少是ES5.x):
best_fields
(默认)查找与任何字段匹配的文档,但在最佳字段中使用_score。见best_fields。
most_fields
查找与任何字段匹配的文档,并从每个字段组合_score。见most_fields。
cross_fields
用同一个分析器处理字段,就好像它们是一个大字段一样。查找任何字段中的每个单词。见cross_fields。
短语
对每个字段运行match_phrase查询,并从每个字段组合_score。见短语和phrase_prefix。
phrase_prefix
对每个字段运行match_phrase_prefix查询,并从每个字段组合_score。见短语和phrase_prefix。
https://stackoverflow.com/questions/44758811
复制相似问题