ruby-on-rails - 提高搜索结果中与数组匹配的文档

标签 ruby-on-rails elasticsearch

我已经建立了这个相对复杂的搜索查询,并且可以进行完美的排序。

但是我认为这里的搜索只是由于脚本而变慢,因此我想删除所有脚本并相应地编写查询。

当前代码:-

"sort": [
{
  "_script": {
    "type": "number",
    "script": {
      "lang": "painless",
      "source": "double pscore = 0;for(id in params.boost_ids){if(params._source.midoffice_master_id == id){pscore = -999999999;}}return pscore;",
      "params": {
        "boost_ids": [
         3,
         4,
         5
        ]
      }
    }
  }
}]

以上代码说明:

例如,如果匹配查询将给出如下结果:
[{m_id: 1, name: A}, {m_id: 2, name: B}, {m_id: 3, name: C}, {m_id: 4, name: D}, ...]

所以我想使用m_id数组[3,4,5]增强文档,然后将结果转换为:
[{m_id: 3, name: C}, {m_id: 4, name: D}, {m_id: 1, name: A}, {m_id: 2, name: B}, ...]

最佳答案

您可以使用Function Score Query(用于提升)和Terms Query(用于查询值数组)来利用以下查询

请注意,我提到的逻辑在bool queryshould子句中。

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}   //just a sample must clause to retrieve all docs
        }
      ],
      "should": [
        {
          "function_score": {     <---- Function Score Query
            "query": {
              "terms": {          <---- Terms Query
                "m_id": [
                  3,4,5
                ]
              }
            },
            "boost": 100          <---- Boosting value
          }
        }
      ]
    } 
  }
}

因此,基本上,您可以完全删除排序逻辑,并在function query子句中添加上面的should,这将为您提供所需的结果。

请注意,如果您有非常复杂的查询,并且如果遇到任何困难,则必须找到一种正确添加逻辑的方法,请告诉我。我很乐意为您服务!

希望这可以帮助!

关于ruby-on-rails - 提高搜索结果中与数组匹配的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58437142/

相关文章:

ruby-on-rails - Ruby on Rails : errors. add_to_base 与 errors.add

mysql - Rails 应用程序在 Mac OS X 上运行良好,但 mongrel 不响应 Windows 7 中的请求

elasticsearch - Elasticsearch每个节拍有多个索引?

autocomplete - Elasticsearch 自动完成或按 token 自动建议

elasticsearch - 为什么我不能在 Elasticsearch 中混合我的数据类型?

在 Elasticsearch 中搜索带空格的名称(文本)

json - Elasticsearch 过滤嵌套对象

ruby-on-rails - 如何让 RSpec 测试子目录中的 Controller ?

ruby-on-rails - 如何从任何 Controller 提交表单 - Rails?

ruby-on-rails - ActiveRecord::StatementInvalid SQLite3::SQLException:没有这样的列:真: