使用搜索分析器时没有结果

时间:2017-03-28 10:13:26

标签: elasticsearch

我正在尝试使用带有重音字符的elasticsearch中的query_string来搜索字符串。

当我使用query_string没有分析器进行查询时,我只得到完全匹配的结果(我正在搜索字符串“Ředitelkvality”所以当我点“Reditel kvality”时我得不到结果)

当我使用与映射中使用的相同的分析器时,无论是否带有提升字符的字符串都没有结果。

分析仪&过滤器:

    "analysis": {
      "filter": {
        "cs_CZ": {
          "recursion_level": "0",
          "locale": "cs_CZ",
          "type": "hunspell",
          "dedup": "true"
        },
        "czech_stemmer": {
          "type": "stemmer",
          "language": "czech"
        },
        "czech_stop": {
          "type": "stop",
          "stopwords": "_czech_"
        }
      },
      "analyzer": {
        "cz": {
          "filter": [
            "standard",
            "lowercase",
            "czech_stop",
            "icu_folding",
            "cs_CZ",
            "lowercase"
          ],
          "type": "custom",
          "tokenizer": "standard"
        },
        "folding": {
          "filter": [
            "standard",
            "lowercase",
            "asciifolding"
          ],
          "type": "custom",
          "tokenizer": "standard"
        }

映射:

"index1": {
    "mappings": {
      "type1": {
        "properties": {
          "revisions": {
            "type": "nested",
            "properties": {
              "title": {
                "type": "text",
                "boost": 10.0,
                "fields": {
                  "folded": {
                    "type": "text",
                    "boost": 6.0,
                    "analyzer": "folding"
                  }
                },
                "analyzer": "cz"

这里的术语向量看起来很好:

"term_vectors": {
        "revisions.title": {
          "field_statistics": {
            "sum_doc_freq": 764,
            "doc_count": 201,
            "sum_ttf": 770
          },
          "terms": {
            "kvalita": {
              "term_freq": 1,
              "tokens": [
                {
                  "position": 1,
                  "start_offset": 8,
                  "end_offset": 15
                }
              ]
            },
            "reditel": {
              "term_freq": 1,
              "tokens": [
                {
                  "position": 0,
                  "start_offset": 0,
                  "end_offset": 7
                }
              ]
            }
          }
        }
      }

当我在查询index1/_analyze?field=type1.revisions.title&text=Ředitel%20kvality上运行分析时 我得到相同的令牌。

{
  "tokens": [
    {
      "token": "reditel",
      "start_offset": 0,
      "end_offset": 7,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "kvalita",
      "start_offset": 8,
      "end_offset": 15,
      "type": "<ALPHANUM>",
      "position": 1
    }
  ]
}

我无法找出错误以及为什么ES不会将“Reditel kvality”与“Ředitelkvality”相匹配。

这是我正在使用的查询:

{
   "query":{
      "bool":{
         "must":[
            {
               "query_string":{
                  "query":"\u0158editel kvality*",
                  "rewrite":"scoring_boolean",
                  "analyzer":"cz",
                  "default_operator":"AND"
               }
            }
         ]
      }
   },
   "size":10,
   "from":0
}

我的ES版本是5.2.2

1 个答案:

答案 0 :(得分:0)

发现什么是错的。 必须在与分析器的映射中定义_all字段。 我从文档中感觉到这是自动的,并且所有字段都是从分析的字段中神奇地创建的。

所以现在在我有的领域

_all": {
          "enabled": true,
          "analyzer": "cz"
        },

它正在发挥作用。

感谢IRC上的很多 Xylakant 指导我。