如何根据filter参数定义文档排序

时间:2014-08-12 15:44:10

标签: elasticsearch

嗨Elasticsearch专家。

我遇到的问题可能是因为我正在索引数据库关系数据。

我的方案如下:

我有两个实体:

文件和会议。

文件和会议是独立的实体。虽然可以按给定的顺序将文档分配给会议。

我们在数据库中使用连接表。

    meetings(id,name,date)
    document(id,title,author)
    meeting_document(doc_id,meeting_id,order)

在elasticsearch中,我将documents_id索引为会议的NESTED属性

会议示例:

    {
     id: 25
     name:"test",
     documents: [22,12,24,55]
    }

我将获取会议,之后我想向document.id上的文件过滤请求,并要求elasticsearch以与我在过滤器列表中传递的顺序相同的顺序返回列表。

实施此方法的最佳方法是什么?

由于

1 个答案:

答案 0 :(得分:2)

好问题, 我花了一些时间为你找到一个解决方案,然后提出一个解决方案,它可能很棘手,但有效。

让我们看看我的查询,

我使用了script score,按用户定义列表进行排序。

POST index/type/_search
{
   "query": {
      "function_score": {
         "functions": [
            {
               "script_score": {
                  "script": "ar.size()-ar.indexOf(doc['docid'].value)",
                  "params": {
                     "ar": [
                        "1",
                        "2",
                        "4",
                        "3"
                     ]
                  }
               }
            }
         ]
      }
   },
   "filter": {
      "terms": {
         "docid": [
            "1",
            "2",
            "4",
            "3"
         ]
      }
   }
}

你需要注意的事情是,

发送,过滤器和参数的相同值。就像上面的查询一样。

这会使我返回文档ID,1,2,4,3。

您必须在脚本和过滤器中更改字段名称,并且可以在查询对象中使用termQuery

我已经测试了代码,希望这有帮助!! 感谢