Elasticsearch同义词和按类别提升

时间:2016-11-29 10:42:17

标签: elasticsearch

我有一个问题,使用elasticsearch浪费了很多时间在这个问题上,你可以帮助我。

我有很多产品的索引,我根据这些搜索的某些类别设置了提升:

{ 
  "from": 1,
  "size": 10
  "query": {
      "bool": {
           'must': {
                'match': {
                    'NAME': {
                         "query": "tv",
                         "operator": "and"
                    }
                },
           },
           "should": { 
                "query_string": {
                    "query": 'category: 23',
                    "boost": 2
                }
           }
       }
}

这项工作很好,结果的评分已经针对这些类别进行了更改。

现在我们想介绍搜索的同义词,我们使用这种方法将synoynyms设置为elasticsearch中的分析器:

"analysis": {
    "analyzer": {
         "synonym": {
              "tokenizer": "whitespace",
              "filter": ["lowercase", "asciifolding", "synonym_filter"]
         }
    },
    "filter": {
        "synonym_filter": {
            "type": "synonym",
            "language": "spanish",
            "synonyms": [
                "tv, television, tdt"
             ]
        }
    }
}

我们更改查询以使用新的分析器,这很好用:

{
    "from": 1,
    "size": 10
    'query': {
        'bool': {
            'must': {
                'match': {
                    'NAME': {
                        "query": "television",
                        "operator": "and",
                        "analyzer": "synonym"
                     }
                }
            }
        }
    }
}

但是当我们尝试对此查询应用boost时,结果不会发生变化

{
    "from": 1,
    "size": 10
    'query': {
        'bool': {
            'must': {
                'match': {
                    'NAME': {
                        "query": "television",
                        "operator": "and",
                        "analyzer" => "synonym"
                    }
                 },
             },
             "should": { 
                 "query_string": {
                     "query": 'category: 23',
                     "boost" => 2
                 }
             }
        }
    }
}

有人可以帮助我吗?

问候。

1 个答案:

答案 0 :(得分:0)

已在5.0的新版本中弃用了索引Boost,其中field mapping boost可用。我想你已经意识到了这一点。

  

指数时间提升已弃用。

如果在索引时它是一个字段级别的提升,那么您的查询不应该像:

"should": { 
              "query_string": {
                   "query": 'category: 23',
                   "boost": 2
               }
          }

如果情况并非如此,则应该使用analyzer。您不应该在analysis标记中使用settings

PUT /index
{
    "settings": {
        "analysis": {
            "analyzer": {                
            }
        }
    }
}

could be helpful