elasticsearch - 通过 _percolator_document_slot 字段的数组长度或 docFreq 对 elasticsearch percolate 查询进行排序
问题描述
我想使用脚本按在其中找到查询的文档数量对渗透查询的响应进行排序。
我正在使用 Elasticsearch 6.8 版
我尝试按 _percolator_document_slot 字段的数组长度排序,但找不到访问该字段的方法。
如果有另一种解决方案使用常规 _score 使用 script_score 来反映文档的数量,这也将是一个答案。
"sort": {
"_script": {
"type": "number",
"script": "_fields._percolator_document_slot.values.size()",
"order": "desc"
}
}
错误:
"reason":{
"type":"script_exception",
"reason":"compile error",
"script_stack":[
"_fields._percolator_docum ...",
"^---- HERE"
],
"script":"_fields._percolator_document_slot.values.size()",
"lang":"painless",
"caused_by":{
"type":"illegal_argument_exception",
"reason":"Variable [_fields] is not defined."
}
}
我也试过:
"script":"_fields._percolator_document_slot.length()",
另一种方法:
{
"query": {
"function_score": {
"query": {
"percolate": {
"field": "query",
"documents": [
{
"message": "bonsai tree"
},
{
"message": "new tree"
},
{
"message": "the office"
},
{
"message": "office tree"
}
]
}
},
"script_score": {
"script": {
"source": "return _index['message'].docFreq();"
}
}
}
}
}
导致此错误:
"caused_by":{
"type":"script_exception",
"reason":"compile error",
"script_stack":[
"return _index['message'].docFreq...",
" ^---- HERE"
],
"script":"return _index['message'].docFreq();",
"lang":"painless",
"caused_by":{
"type":"illegal_argument_exception",
"reason":"Variable [_index] is not defined."
}
}
指数:
PUT /my-index
{
"mappings": {
"_doc": {
"properties": {
"message": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
}
注册查询:
PUT /my-index/_doc/1?refresh
{
"query" : {
"match" : {
"message" : "bonsai tree"
}
}
}
匹配多个文档(不排序):
GET /my-index/_search
{
"query" : {
"percolate" : {
"field" : "query",
"documents" : [
{
"message" : "bonsai tree"
},
{
"message" : "new tree"
},
{
"message" : "the office"
},
{
"message" : "office tree"
}
]
}
}
}
回复:
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped" : 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.5606477,
"hits": [
{
"_index": "my-index",
"_type": "_doc",
"_id": "1",
"_score": 1.5606477,
"_source": {
"query": {
"match": {
"message": "bonsai tree"
}
}
},
"fields" : {
"_percolator_document_slot" : [0, 1, 3]
}
}
]
}
}
解决方案
推荐阅读
- sql - Cant figure out this SQL Trigger
- database - 什么数据库适合实体之间的组合关系?
- javascript - Expo FileSystem.writeAsStringAsync 不像 Promise
- python - AttributeError:“str”对象没有属性“duration”
- typescript - 在没有`get`的情况下创建相互引用的常量
- javascript - 如何从 Express 后端服务器发送和获取数据
- nginx - 带有letsencrypt的Kubernetes证书管理器,挑战未决?
- css - 应用 :host css 基于祖先
- github - 如何保留来自 github 子模块的文件的同步副本
- apache-kafka - Kafka Streams Suppression 阻止转发