例如,我有两个字段的实体 - 文本和日期.我希望按实体搜索结果按日期排序.但如果我这样做,那么结果是出乎意料的.
对于搜索查询"Iphone 6",最新的文本只有"6"在结果的顶部,而不是"iphone 6".没有排序,结果似乎很好,但不按我想要的日期排序.
如何编写自定义排序函数,同时考虑相关性和日期?或者可能存在给予场上权重的方式日期将在评分中考虑?
另外,我可能只想用"6"来抑制搜索结果.如何自定义搜索以仅通过bigrams查找结果?
小智 13
您是否尝试过这样的bool查询?
{
"query": {
"bool": {
"must": {
"match": {
"field": "iphone 6"
}
}
}
},
"sort": {
"date": {
"order": "desc"
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者你的查询你也可以用更合适的方式做我猜...
只需将其添加为排序
"sort": [
{ "date": { "order": "desc" }},
{ "_score": { "order": "desc" }}
]
Run Code Online (Sandbox Code Playgroud)
所有匹配的结果首先按日期排序,然后按相关性排序.
解决方案是使用_score和date字段都排序。_score作为第一个排序顺序,date字段作为第二个排序顺序。
您可以使用简单的匹配查询来执行相关性匹配。
试试看。
数据设置:
POST ecom/prod
{
"name":"iphone 6",
"date":"2019-02-10"
}
POST ecom/prod
{
"name":"iphone 5",
"date":"2019-01-10"
}
POST ecom/prod
{
"name":"iphone 6",
"date":"2019-02-28"
}
POST ecom/prod
{
"name":"6",
"date":"2019-03-01"
}
Run Code Online (Sandbox Code Playgroud)
查询相关性和基于日期的排序:
POST ecommerce/prododuct/_search
{
"query": {
"match": {
"name": "iphone 6"
}
},
"sort": [
{
"_score": {
"order": "desc"
}
},
{
"date": {
"order": "desc"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12931 次 |
| 最近记录: |