在elasticsearch

时间:2018-03-27 13:40:04

标签: magento elasticsearch search magento2

我正在使用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"
        }
      }
    }
  }
}

我索引了一个字段“name:Princess Print T-shirt”。

正如使用空白分析器,es创建像“T恤”这样的标记。 但是为了搜索我正在使用“search_analyzer”:“标准”我认为这个查询就像“公主印花T恤”,这个“T恤”将不匹配,因此会给出空搜索结果。 我身边的一个解决方案就像添加“T恤,T恤”这样的同义词。然后我会得到结果。但在这种情况下,如果我们搜索“衬衫”,它将返回“T恤和衬衫”,这是不可接受的。 如果我没有使用这个“search_analyzer”:“标准”我没有得到预期的结果。 如果我搜索“T恤”,我只需要搜索结果

1 个答案:

答案 0 :(得分:2)

问题描述

问题部分如您所述[{1}}。

这会将"search_analyzer": "standard"的每个条目转换为代币T-shirtt。 索引中的数据看起来像shirtt-shirt,依此类推,但不匹配。

可能的解决方案

适应搜索分析器

您需要确保查询是小写的,在空白处拆分。 因此,您可以使用t-shir https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html结合小写分析器为查询时间定义自定义分析器。