[英]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.