Elasticsearch 按术语值的顺序排序
Elasticsearch sort by terms values' order
我正在将我的推荐服务与产品服务联系起来。推荐服务,无论参数是什么,总是returns一个按照相关性排序的产品ID列表。示例:
["ID1", "ID2", "ID3"]
产品服务拥有存储产品详细信息的 Elasticsearch 索引。客户需要推荐产品的数据以及相关性排序的产品详细信息。因此我正在使用这个搜索查询:
{
"query":{
"bool":{
"filter":[
{
"terms": {
"product_id": ["ID1", "ID2", "ID3"]
}
}
]
}
}
}
问题是该查询的结果未按术语值的顺序排序。我可以做出哪些改变来实现目标?
P.S.: Elasticsearch 索引设计、服务响应格式、推荐系统设计等方面的任何建议或参考都将受到欢迎。
terms
查询用作 OR
过滤器,以布尔方式对匹配项进行评分(true -> 1
、false -> 0
)。
话虽如此,您可以通过 query_string
查询 boost the individual IDs 生成类似的 OR
查询,从而提高他们的分数,从而提高排序:
{
"query":{
"bool":{
"should": [
{
"query_string": {
"default_field": "product_id",
"query": "ID1^3 OR ID2^2 OR ID3^1"
}
}
],
"filter":[
{
"terms": {
"product_id": ["ID1", "ID2", "ID3"]
}
}
]
}
}
}
当然可以动态更改上述提升值,以适应 ID 列表的不同长度。
我正在将我的推荐服务与产品服务联系起来。推荐服务,无论参数是什么,总是returns一个按照相关性排序的产品ID列表。示例:
["ID1", "ID2", "ID3"]
产品服务拥有存储产品详细信息的 Elasticsearch 索引。客户需要推荐产品的数据以及相关性排序的产品详细信息。因此我正在使用这个搜索查询:
{
"query":{
"bool":{
"filter":[
{
"terms": {
"product_id": ["ID1", "ID2", "ID3"]
}
}
]
}
}
}
问题是该查询的结果未按术语值的顺序排序。我可以做出哪些改变来实现目标?
P.S.: Elasticsearch 索引设计、服务响应格式、推荐系统设计等方面的任何建议或参考都将受到欢迎。
terms
查询用作 OR
过滤器,以布尔方式对匹配项进行评分(true -> 1
、false -> 0
)。
话虽如此,您可以通过 query_string
查询 boost the individual IDs 生成类似的 OR
查询,从而提高他们的分数,从而提高排序:
{
"query":{
"bool":{
"should": [
{
"query_string": {
"default_field": "product_id",
"query": "ID1^3 OR ID2^2 OR ID3^1"
}
}
],
"filter":[
{
"terms": {
"product_id": ["ID1", "ID2", "ID3"]
}
}
]
}
}
}
当然可以动态更改上述提升值,以适应 ID 列表的不同长度。