我有一个名为title的字段,其值如下所示
因此,如果用户搜索
苹果iphone 6
然后它应该按照
的顺序出现2> 1> 3> 4> 5
。 如果用户搜索
apple iphone 6s
它应按顺序排列
1> 3> 2> 4> 5。
如何使用elasticsearch完成此操作。
我使用了multi_search和all。但没有帮助。
首先应该完全匹配订单,然后是前缀。然后短语然后字段包含所有3个术语,然后字段包含2个术语,然后字段包含1个术语,依此类推。
感谢您的帮助。
答案 0 :(得分:0)
您可以尝试:
{
"query": {
"bool":{
"should":[
{"match_phrase":{"title":"apple iphone 6s"}},
{"match_phrase_prefix":{"title":"apple iphone 6s"}}
]
}
}
}
如果您想要所有包含“iphone”和“apple”的数据,则应为搜索中的每个单词添加match_phrase_prefix
。
答案 1 :(得分:0)
如果您想按照您指定的顺序获得结果,则需要进行此类查询:
POST /phone/phone/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase_prefix": {
"text": "apple iphone 6"
}
},
{
"match": {
"text": "apple iphone 6"
}
}
]
}
}
}
搜索查询字符串" apple iphone 6"和结果顺序:
答案 2 :(得分:0)
我在下面这样做。它以我想要的预期方式给我结果。
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "apple iphone 6",
"fields": ["title"],
"operator": "and",
"boost": 1
}
}, {
"multi_match": {
"query": "apple iphone 6",
"fields": ["title"],
"type": "phrase_prefix",
"boost": 2
}
}, {
"multi_match": {
"query": "apple iphone 6",
"fields": ["title"],
"type": "phrase",
"boost": 3
}
}]
}
}
}
}
}