elasticsearch:自定义分数函数,多匹配查询和per_field助推

时间:2017-12-22 09:30:56

标签: elasticsearch

我是弹性搜索的新手。 我想搜索以前标记过的文档。文档中的每个标记都有一个权重,表示标记对该特定文档的重要性。

用户提供一些搜索词(单词或短语),引擎应返回标有这些(或类似)术语的文档。我创建了一个嵌套类型和多个字段的映射。 Bellow我复制了我的映射定义的一部分。

class YourTestCase(TestCase):
   multi_db = True

   def test_something(self):
       pass

我需要根据文档标记与搜索字词的匹配程度以及每个文档的标记权重来对搜索结果进行评分。因此,我想定义自己的评分函数,忽略基于tf-idf的默认函数。

我到目前为止找到的解决方案是使用function_score和multi_match查询,根据搜索的相关性提升字段,如下图所示:

 "properties": {
       "weighted_tags": {
           "type": "nested",
           "properties": {
               "tags": {
                  "type": "text",
                   "analyzer": "synonym",
                   "fields": {
                       "eng": {
                          "type": "text",
                          "analyzer": "english",
                          "search_analyzer": "english"
                       },
                       "raw": {
                           "type": "keyword"
                       }
                   }
               },
               "tag_weight": {
                   "type": "float"
               }
           }
       } }

我的问题是:如何在script_score上使用增强权重(示例中的1,5和10)?当与“boost_mode”结合使用时,增强作用是否有用:“替换”?对于我刚才描述的问题,有没有更好的解决方案?

提前谢谢你, Renata Rego

0 个答案:

没有答案