繁体   English   中英

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

[英]ElasticSearch writing query for priority search

我是elastisearch的新手,我只是对其进行设置并尝试了默认搜索。 我正在使用elasticsearch rails gem。 我需要编写具有优先级搜索的自定义查询(表中的某些字段比其他字段更重要,等等,例如标题,最近6个月的updated_at)。 我试图找到有关如何执行此操作的说明或教程,但似乎没有什么可以理解的。 谁能帮我这个忙,很快就会好。

从未使用过ruby / elasticsearch集成,这似乎并不难... 这里的文档表明您想要执行以下操作:

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

做一个基本的搜索。

此处的ES文档显示了如何进行字段增强查询:

{
  "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倍。

关于如何进行高级评分,有一篇非常不错的博客文章 它的一部分显示了根据日期调整分数的示例:

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

我已经在php中完成,从没在Ruby上使用过Ruby的gem。 在这里,您可以使用脱字符号(^)赋予字段优先级。

示例:-假设如果我们在表中具有字段(即姓名,电子邮件,消息和地址),并且应该给该名称和消息指定优先级,则可以编写如下

> {   "multi_match" : {
>     "query" : "this is a test",
>     "fields" : [ "name^3", "message^2".... ]    } }

这里name的优先级比其他字段高3倍,消息的优先级比其他字段高2倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM