首页 > 解决方案 > ElasticSearch 按短语位置排序

问题描述

我有一个优先级提升的查询,查询工作正常,但结果未排序

{
"query": {
"bool": {
  "should": [
    {
      "bool": {
        "should": [
          {
            "prefix": {
              "subitem.keyword": "i love dogs"
            }
          }
        ],
        "boost": 100
      }
    },
    {
      "bool": {
        "should": [
          {
            "match": {
              "subitem": {
                "query": "i love dogs",
                "operator": "AND"
              }
            }
          }
        ],
        "boost": 10
      }
    },
    {
      "bool": {
        "should": [
          {
            "match_phrase": {
              "subitem": "i love dogs"
            }
          }
        ],
        "boost": 30
      }
    }
  ]
}
},
"size": 30
}

搜索设置:

我使用波斯分析器和自定义规范器

   "analysis" => [
        "normalizer" => [
          "my_normalizer" => [
            "filter" => [
              "lowercase"
            ],
            "type" => "custom"
          ]
        ],
        "char_filter"=> [
          "zero_width_spaces"=> [
              "type"=>       "mapping",
              "mappings"=> [ "\\u200C=> "] 
          ]
        ],
        "filter"=> [
          "persian_stop"=> [
            "type"=>       "stop",
            "stopwords"=>  "_persian_" 
          ],
        ],
        "analyzer"=> [
          "persian"=> [
            "tokenizer" =>  "standard",
            "char_filter"=> [ "zero_width_spaces" ],
            "filter"=> [
              "lowercase",
              "arabic_normalization",
              "persian_normalization",
              "persian_stop",
            ]
          ],
        ]
      ]

在关键字字段上使用规范器搜索映射并键入关键字

   "whole_name_fa" => [
            'type' => 'text',
            'analyzer' => 'persian',
            "fields" => [
                "keyword" => [
                  "type" => "keyword",
                  "ignore_above" => 256,
                  "normalizer" => "my_normalizer"
                ]
            ]
        ],

我想按短语的位置对结果进行排序

例如,结果中的“我爱狗”必须按如下排序:

i love dogs
i love dogs and cats
cats goods and i love dogs and birds
cats goods birds goods i love dogs

标签: elasticsearch

解决方案


推荐阅读