使用 Elasticsearch 进行布尔查询
Boolean Query with Elasticsearch
我目前正在使用以下查询 -
{
"_source": [
"title",
"bench",
"id_",
"court",
"date",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "the",
"fields": [
"content"
], "operator": "and"
}
},
],
"should": {
"multi_match": {
"query": "the",
"fields": [
"content.standard^2"
], "operator": "and"
}
}
}
}
,
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {}
},
"fragment_size": 100
}
}
具有以下映射
{
"courts_2": {
"mappings": {
"properties": {
"author": {
"type": "text",
"analyzer": "my_analyzer"
},
"bench": {
"type": "text",
"analyzer": "my_analyzer"
},
"citation": {
"type": "text"
},
"content": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"court": {
"type": "text"
},
"date": {
"type": "text"
},
"id_": {
"type": "text"
},
"title": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"verdict": {
"type": "text"
}
}
}
}
}
我的分析仪是 Metaphone
分析仪。
这是我的目标。我希望首先出现完全匹配(标准),然后是拼音匹配。我可以用代码实现这一点。我很确定这里面有一些不需要的逻辑,如果有人能指出它,我将不胜感激。
另外,我想合并的是一个搜索逻辑,用户可以在其中输入搜索
皇家马德里和巴塞罗那或曼联。
在这里,我想要包含 Real Madrid 和 Barcelona/Man Utd/ 我如何使用当前查询(经过修改)实现的所有文档?
我在您的查询中看不到任何副作用。关于您的搜索逻辑,最简单的方法可能是使用 query string query 代替。它默认支持布尔运算符,因此您的查询可能如下所示:
{
"_source": [
"title",
"bench",
"id_",
"court",
"date",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": [
{
"query_string" : {
"query" : "Real Madrid AND Barcelona OR Manchester United",
"fields" : ["content", "title"],
"operator": "and"
}
}
],
"should": {
"query_string" : {
"query" : "Real Madrid AND Barcelona OR Manchester United",
"fields" : ["content.standard", "title.standard"],
"boost": 2,
"operator": "and"
}
}
}
},
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {}
},
"fragment_size": 100
}
}
否则,您将不得不解析查询并使用多个 bool 查询对运算符建模。
我目前正在使用以下查询 -
{
"_source": [
"title",
"bench",
"id_",
"court",
"date",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "the",
"fields": [
"content"
], "operator": "and"
}
},
],
"should": {
"multi_match": {
"query": "the",
"fields": [
"content.standard^2"
], "operator": "and"
}
}
}
}
,
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {}
},
"fragment_size": 100
}
}
具有以下映射
{
"courts_2": {
"mappings": {
"properties": {
"author": {
"type": "text",
"analyzer": "my_analyzer"
},
"bench": {
"type": "text",
"analyzer": "my_analyzer"
},
"citation": {
"type": "text"
},
"content": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"court": {
"type": "text"
},
"date": {
"type": "text"
},
"id_": {
"type": "text"
},
"title": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"verdict": {
"type": "text"
}
}
}
}
}
我的分析仪是 Metaphone
分析仪。
这是我的目标。我希望首先出现完全匹配(标准),然后是拼音匹配。我可以用代码实现这一点。我很确定这里面有一些不需要的逻辑,如果有人能指出它,我将不胜感激。
另外,我想合并的是一个搜索逻辑,用户可以在其中输入搜索
皇家马德里和巴塞罗那或曼联。 在这里,我想要包含 Real Madrid 和 Barcelona/Man Utd/ 我如何使用当前查询(经过修改)实现的所有文档?
我在您的查询中看不到任何副作用。关于您的搜索逻辑,最简单的方法可能是使用 query string query 代替。它默认支持布尔运算符,因此您的查询可能如下所示:
{
"_source": [
"title",
"bench",
"id_",
"court",
"date",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": [
{
"query_string" : {
"query" : "Real Madrid AND Barcelona OR Manchester United",
"fields" : ["content", "title"],
"operator": "and"
}
}
],
"should": {
"query_string" : {
"query" : "Real Madrid AND Barcelona OR Manchester United",
"fields" : ["content.standard", "title.standard"],
"boost": 2,
"operator": "and"
}
}
}
},
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {}
},
"fragment_size": 100
}
}
否则,您将不得不解析查询并使用多个 bool 查询对运算符建模。