elasticsearch 6.4不计算字段中的search_analyzer

时间:2018-08-31 13:37:32

标签: elasticsearch analyzer elasticsearch-6 elasticsearch-analyzers

我对ElasticSearch映射有问题。 例如,字段name的映射为:

{
    "name": {
        "type": "keyword",
        "fields": {
            "ngram": {
                "type": "text",
                "analyzer": "ngram_analyzer",
                "search_analyzer": "ngram_analyzer"
            },
            "word": {
                "type": "text",
                "analyzer": "word_analyzer",
                "search_analyzer": "word_analyzer"
            }
        }
    }
}

除了search_analyzer之外,整个映射都起作用,{ "analysis":{ "analyzer":{ "ngram_analyzer":{ "type":"custom", "char_filter":[ "number_char_filter_map", "remove_duplicates" ], "tokenizer":"ngram_tokenizer_whitespace", "filter":[ "lowercase", "english_stop" ] }, "word_analyzer":{ "type":"custom", "char_filter":[ "number_char_filter_map", "remove_duplicates" ], "tokenizer":"word_tokenizer", "filter":[ "lowercase", "english_stop" ] } }, "char_filter":{ "remove_duplicates":{ "type":"pattern_replace", "pattern":"(.)(?=\\1)", "replacement":"" }, "remove_white_spaces":{ "type":"pattern_replace", "pattern":"(\s)", "replacement":"" } }, "filter":{ "english_stop":{ "type":"stop", "ignore_case":true, "stopwords":"_english_" } }, "tokenizer":{ "ngram_tokenizer":{ "type":"ngram", "min_gram":2, "max_gram":7 }, "ngram_tokenizer_whitespace":{ "type":"ngram", "min_gram":2, "max_gram":7, "token_chars":[ "letter", "digit", "punctuation", "symbol" ] }, "word_tokenizer":{ "type":"standard" } } } } 似乎被ElasticSearch忽略了。

分析设置:

search_analyzer

根据ElasticSearch文档,我在字段中没有找到text-align:center的任何定义。如果此方法不起作用,是否还有其他结构可以包括搜索分析器?

1 个答案:

答案 0 :(得分:0)

几天后问题解决了... 问题是使用与search_analyzer相同的分析器。我只是在设置中设置了另一个名称不同的分析器(使用与分析器相同的键,而search_analyzer似乎会引起问题,并忽略search_analyzer)。

ngram_analyzer克隆到ngram_search_analyzerword_analyzer克隆到word_search_analyzer

以及创建映射请求:

PUT /suggestions HTTP/1.1
Host: localhost:9200
Content-Type: application/json

{
   "mappings":{
      "doc":{
         "properties":{
            "caption":{
               "type":"keyword",
               "fields":{
                  "ngram":{
                     "type":"text",
                     "analyzer":"ngram_analyzer",
                     "search_analyzer":"ngram_search_analyzer"
                  },
                  "word":{
                     "type":"text",
                     "analyzer":"word_analyzer",
                     "search_analyzer":"word_search_analyzer"
                  }
               }
            }
         }
      }
   },
   "settings":{
      "number_of_shards":1,
      "number_of_replicas":1,
      "routing_partition_size":1,
      "analysis":{
         "analyzer":{
            "ngram_analyzer":{
               "type":"custom",
               "char_filter":[
                  "number_char_filter_map",
                  "remove_duplicates"
               ],
               "tokenizer":"ngram_tokenizer_whitespace",
               "filter":[
                  "lowercase",
                  "english_stop"
               ]
            },
            "ngram_search_analyzer":{
               "type":"custom",
               "char_filter":[
                  "number_char_filter_map",
                  "remove_duplicates"
               ],
               "tokenizer":"ngram_tokenizer_whitespace",
               "filter":[
                  "lowercase",
                  "english_stop"
               ]
            },
            "word_analyzer":{
               "type":"custom",
               "char_filter":[
                  "number_char_filter_map",
                  "remove_duplicates"
               ],
               "tokenizer":"word_tokenizer",
               "filter":[
                  "lowercase",
                  "english_stop"
               ]
            },
            "word_search_analyzer":{
               "type":"custom",
               "char_filter":[
                  "number_char_filter_map",
                  "remove_duplicates"
               ],
               "tokenizer":"word_tokenizer",
               "filter":[
                  "lowercase",
                  "english_stop"
               ]
            }
         },
         "char_filter":{
            "number_char_filter_map":{
               "type":"mapping",
               "mappings":[
                  "\u0660 => 0",
                  "\u0661 => 1",
                  "\u0662 => 2",
                  "\u0663 => 3",
                  "\u0664 => 4",
                  "\u0665 => 5",
                  "\u0666 => 6",
                  "\u0667 => 7",
                  "\u0668 => 8",
                  "\u0669 => 9",
                  "\u06f0 => 0",
                  "\u06f1 => 1",
                  "\u06f2 => 2",
                  "\u06f3 => 3",
                  "\u06f4 => 4",
                  "\u06f5 => 5",
                  "\u06f6 => 6",
                  "\u06f7 => 7",
                  "\u06f8 => 8",
                  "\u06f9 => 9"
               ]
            },
            "remove_duplicates":{
               "type":"pattern_replace",
               "pattern":"(.)(?=\\1)",
               "replacement":""
            },
            "remove_white_spaces":{
               "type":"pattern_replace",
               "pattern":"(\\s)",
               "replacement":""
            }
         },
         "filter":{
            "english_stop":{
               "type":"stop",
               "ignore_case":true,
               "stopwords":"_english_"
            }
         },
         "tokenizer":{
            "ngram_tokenizer":{
               "type":"ngram",
               "min_gram":2,
               "max_gram":7
            },
            "ngram_tokenizer_whitespace":{
               "type":"ngram",
               "min_gram":2,
               "max_gram":7,
               "token_chars":[
                  "letter",
                  "digit",
                  "punctuation",
                  "symbol"
               ]
            },
            "word_tokenizer":{
               "type":"standard",
               "token_chars":[

               ]
            }
         }
      }
   }
}

现在我在映射中看到搜索分析器:]

我认为拥有不同的分析器和搜索分析器以用于以后的自定义也是一件好事。