搜索同义词时,Elastic Search 搜索查询未返回

问题描述

所以我试图在 Elastic Search 中实现同义词(在搜索时),到目前为止我已经在 Kibana 中定义了这样的同义词:


PUT /<my_index>/_settings
{
 "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym": {
            "analyzer": "standard","search_analyzer": "synonym_analyzer","type": "synonym","synonyms": [
              "foo => bar"
            ]
          }
        }
      }
    }
  }
}

但是当我尝试搜索 foo 时,我什么也得不到。

我的搜索请求如下所示:


GET <my_index>/_search
{
  "size": "12","from": "0","min_score": "0.1","query": {
    "function_score": {
      "functions": [
        {
          "field_value_factor": {
            "field": "product.sales_count","missing": 0,"modifier": "log1p"
          }
        },{
          "field_value_factor": {
            "field": "product.image_count","modifier": "log1p"
          }
        }
      ],"query": {
        "bool": {
          "filter": [
            {
              "term": {
                "product.is_visible": true
              }
            }
          ],"should": [
            {
              "query_string": {
                "default_field": "product.i18ns.ro_RO.*.analyzed","query": "foo","analyzer": "synonym_analyzer"
              }
            },{
              "query_string": {
                "default_field": "categories.i18ns.ro_RO.*.analyzed",{
              "query_string": {
                "default_field": "brands.i18ns.ro_RO.*.analyzed",{
              "query_string": {
                "default_field": "product.images.i18ns.ro_RO.*.analyzed",{
              "query_string": {
                "default_field": "features.i18ns.ro_RO.*.analyzed",{
              "query_string": {
                "default_field": "product.ref","boost": 2     
              }
            }
          ]
        }
      }
    }
  },"aggs": {
    "by_categories": {
      "terms": {
        "field": "categories.i18ns.ro_RO.title.raw","size": 100
      }
    }
  }
}

注意:我的索引中有 bar

解决方法

您定义同义词分析器的方式存在一些问题。 analyzer 部分必须在 analysis 部分下,而不是在索引设置的 filter 部分下。请参阅此official documentation,了解有关同义词标记过滤器设置的更多信息

添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例。

索引映射:

{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "synonym_filter": {
            "type": "synonym","synonyms": [
              "foo => bar"
            ]
          }
        },"analyzer": {
          "synonym_analyzer": {
            "filter": [
              "synonym_filter"
            ],"tokenizer": "standard"
          }
        }
      }
    }
  },"mappings": {
    "properties": {
      "title": {
        "type": "text"
      }
    }
  }
}

索引数据:

{
  "title": "bar"
}

搜索查询:

{
  "query": {
    "match": {
      "title": {
        "query": "foo","analyzer": "synonym_analyzer"
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "67566386","_type": "_doc","_id": "2","_score": 0.9808292,"_source": {
          "title": "bar"
        }
      }
    ]