我正在为ElasticSearch使用以下设置和映射

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 10
        },
        "synonym_filter": {
          "type": "synonym",
          "synonyms":[
            "yoga,fit-sports,blue",
            "tshirt,tees,t-shirt "
          ]
        }
      },
      "analyzer": {
        "autocomplete": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": [
            "lowercase",
            "synonym_filter",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "products": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          },
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        }
      }
    }
  }
}

我在字段“名称:公主印花T恤”上建立了索引。

就像使用空白分析器一样,es会创建“T恤”之类的 token 。
但是对于搜索,我使用的是“search_analyzer”:“standard”,我认为查询就像“公主印花T恤”,并且此“T恤”将不匹配,因此将给出空的搜索结果。
我这边的一种解决方案就像添加“t恤,t恤”之类的同义词。然后我会得到结果。但是在这种情况下,如果我们搜索“衬衫”,它将同时返回“T恤和衬衫”,这是 Not Acceptable 。
如果我不使用此“search_analyzer”:“standard”,则不会得到预期的结果。
如果我搜索“t恤”,则只需要tat搜索结果

最佳答案

问题描述
问题部分在于您已经描述了"search_analyzer": "standard"
这会将T-shirt的每个条目转换为 token tshirt
索引中的数据看起来像t-shirtt-shir等,并且不匹配。
可能的解决方案
适应搜索分析器
您需要确保查询是小写的,并且在空格处分割。
因此,您还可以使用whitespace analyzer https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html结合小写分析器来定义用于查询时间的自定义分析器。

关于magento - 在Elasticsearch中搜索T恤不退还T恤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49514491/

10-11 08:31