【发布时间】:2018-01-15 15:27:11
【问题描述】:
按照示例数据,我已在索引中插入...
"name":"Apple silicon cases for iPhone 6S Silver", "price":"100"
"name":"Apple silicon cases for iPhone 6S Gold", "price":"200"
"name":"Apple silicon cases for iPhone 6S Space Gray", "price":"300"
"name":"iPhone 8", "price":"70000"
"name":"iPhone 8 Plus", "price":"80000"
"name":"iPhone X", "price":"100000"
"name":"iPhone 8 Case, Black color", "price":"500"
"name":"iPhone battery charger", "price":"1000"
索引映射
{
"shopfront": {
"mappings": {
"products": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"price": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
当我运行以下查询时...
POST shopfront/products/_search
{
"query": {
"match": {
"name": "iphone"
}
}
}
我得到的结果是
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8,
"max_score": 0.2876821,
"hits": [
{
"_index": "shopfront",
"_type": "products",
"_id": "3",
"_score": 0.2876821,
"_source": {
"name": "Apple silicon cases for iPhone 6S Space Gray",
"price": "300"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "7",
"_score": 0.19566216,
"_source": {
"name": "iPhone 8 Case, Black color",
"price": "500"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "5",
"_score": 0.18232156,
"_source": {
"name": "iPhone 8 Plus",
"price": "80000"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "8",
"_score": 0.18232156,
"_source": {
"name": "iPhone battery charger",
"price": "1000"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "1",
"_score": 0.17068404,
"_source": {
"name": "Apple silicon cases for iPhone 6S Silver",
"price": "100"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "4",
"_score": 0.16403349,
"_source": {
"name": "iPhone 8",
"price": "70000"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "6",
"_score": 0.16403349,
"_source": {
"name": "iPhone X",
"price": "100000"
}
},
{
"_index": "shopfront",
"_type": "products",
"_id": "2",
"_score": 0.097333126,
"_source": {
"name": "Apple silicon cases for iPhone 6S Gold",
"price": "200"
}
}
]
}
}
我想要的是所有“iPhone”都应该在搜索列表的顶部,其余的应该在搜索列表的底部。
例如:
iPhone 8
iPhone 8 Plus
iPhone X
iPhone 8 Case, Black color
iPhone battery charger
Apple silicon cases for iPhone 6S Silver
Apple silicon cases for iPhone 6S Gold
Apple silicon cases for iPhone 6S Space Gray
"match_phrase_prefix" 也有帮助。任何想法,如何处理这种情况?
【问题讨论】:
-
您可以遍历结果,检查第一个单词并将其与您的查询匹配并进行相应的排序。只是一种解决方法。
-
是的,我可以作为最后的选择。但是,现在我正在从弹性的角度寻找一些解决方案。我真的觉得在 Elastic 本身中可能有任何简单的解决方案可以做到这一点,因为从搜索的角度来看,这是一种非常基本的要求。
-
POST shopfront/products/_search?
explain=true将帮助您了解评分。 -
由于您的文档太少,请确保索引只有一个分片。或者使用参数运行您的查询:
?search_type=dfs_query_then_fetch。你应该用这个以正确的顺序得到结果。 elastic.co/blog/…
标签: elasticsearch