ElasticSearch编写查询以进行优先级搜索

时间:2014-08-29 10:20:42

标签: ruby-on-rails ruby-on-rails-4 elasticsearch

我是弹性系统的新手,我只是设置它并尝试默认搜索。我正在使用elasticsearch rails gem。我需要使用优先级搜索来编写自定义查询(表中的某些字段比其他字段更重要,等等。标题,过去6个月中的updated_at ......)。我试图找到解释或教程如何做到这一点,但似乎没有什么是可以理解的。很快,任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

从未使用过ruby / elasticsearch集成,它似乎并不太难......文档here表明你想要做这样的事情:

client.search index: 'my-index', body: { query: { match: { title: 'test' } } }

进行基本搜索。

ES文档here显示了如何进行字段提升查询:

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^3", "message" ] 
  }
}

总而言之,你会做这样的事情:

client.search index: 'my-index', body: { query: { multi_match : {
    query : "this is a test",
    fields : [ "subject^3", "message" ] 
  } } }

这将允许您搜索/增强字段 - 在上述情况下,主题字段的给出是消息字段分数的3倍。

关于如何进行高级评分有一个非常好的blog post。其中一部分显示了根据日期调整分数的示例:

...
     "filter": {
        "exists": {
          "field": "date"
        }
      },
      "script": "(0.08 / ((3.16*pow(10,-11)) * abs(now - doc['date'].date.getMillis()) + 0.05)) + 1.0"
...