我正在使用elasticSearch 2.2 whith索引我无法轻易更改映射,我希望根据关键字做一些搜索请求。
这里是我的字符串数组字段“keywords”的映射:
"keywords": {
"type": "string",
"norms": {
"enabled": false
},
"analyzer": "analyzer_keyword"
"analyzer_keyword": {
"filter": "lowercase",
"tokenizer": "keyword"
}
我想使用bool请求查询它,例如POST:
{
"query":
{
"bool" : {
"should" :
[
{
"term":
{
"keywords": "foo bar",
}
},
{
"term":
{
"keywords": "baz",
}
},
{
"term":
{
"keywords": "qux",
}
}
]
}
},
"highlight": {
"fields" : {
"keywords" : {}
}
}
}
我希望得到的最佳匹配得分是包含最多关键字的匹配。
我希望此请求按分数排序的匹配示例:
但我有一些这样的结果:
你有什么想法可以帮助我管理吗?
抱歉我的英文不好,谢谢你的帮助。
答案 0 :(得分:0)
结果按其分数排序,这些分数取决于许多标准,包括分片中匹配术语的频率。但你不在乎,你想要条件的所有条款得分相同,你可以使用的是:
GET /test/test/_search
{
"query": {
"bool": {
"should": [
{
"constant_score": {
"query": {
"term": {
"keywords": "foo bar"
}
}
}
},
{
"constant_score": {
"query": {
"term": {
"keywords": "qux"
}
}
}
},
{
"constant_score": {
"query": {
"term": {
"keywords": "baz"
}
}
}
}
]
}
}
}