我需要在弹性搜索中编写一个非常复杂的查询。
查询存储在字符串query
中,其目的是在字段title
和content
上进行“bool”匹配,但是要给予特殊权重诸如“java”或“python”之类的词。
我这样做的尝试是
{
"fields": ["title","content","id"],
"query": {
"function_score": {
"query":
{
"bool":
{
"should":
[
{"match": {"title": {"query": query, "boost": 15}}},
{"match": {"content": {"query": query, "boost": 9}}}
]
}
}
},
"functions": [
{
"filter": {
"match": {
"title": "java"
}},
"weight": 2 },
{
"filter": {
"match": {
"title": "python"
}},
"weight": 2 }
],
"boost_mode": "multiply"
}
}
但是我收到一条错误消息,指出查询格式错误。如果这是一个天真的问题,我很抱歉,但我不知道还能在哪里转。
答案 0 :(得分:0)
试试这个:
{
"fields": [
"title",
"content",
"id"
],
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"match": {
"title": {
"query": query,
"boost": 15
}
}
},
{
"match": {
"content": {
"query": query,
"boost": 9
}
}
}
]
}
},
"functions": [
{
"filter": {
"match": {
"title": "java"
}
},
"weight": 2
},
{
"filter": {
"match": {
"title": "python"
}
},
"weight": 2
}
],
"boost_mode": "multiply"
}
}
}