ElasticSearch 5用于内容搜索设置和使用ngram查询

时间:2017-04-30 07:33:51

标签: elasticsearch n-gram elasticsearch-5

这是我的ES5索引设置:

dev: {
  settings: {
    index: {
      number_of_shards: "5",
      provided_name: "dev",
      creation_date: "1491735064046",
      analysis: {
        filter: {
          trigrams_filter: {
            type: "ngram",
            min_gram: "3",
            max_gram: "3"
            }
         },
        analyzer: {
          trigrams: {
            filter: [
              "lowercase",
              "trigrams_filter"
            ],
            type: "custom",
            tokenizer: "standard"
           }
         }
       },
     number_of_replicas: "1",
     uuid: "2dcgz81ET0GRFa-EEwsUhA",
     version: {
       created: "5020299"
     }
   }
 }

},

此查询将按预期提供1个结果:

{'from': 0,
 'query': {'bool': {'filter': [{'term': {'public': True}}],
                    'must': [{'multi_match': {'fields': ['author_name',
                                                         'title^5',
                                                         'title_ngram',
                                                         'title.ngram',
                                                         'title.stemmed',
                                                         'text^3',
                                                         'text.stemmed',
                                                         'keywords',
                                                         'keywords.stemmed',
                                                         'categories',
                                                                 'categories.stemmed'],
                                              'fuzziness': 'AUTO',
                                              'query': u'austrailia'}}]}},
 'size': 20}

因为有一篇标题为australia的文章。

aust的此查询不会产生任何结果:

{'from': 0,
 'query': {'bool': {'filter': [{'term': {'public': True}}],
                    'must': [{'multi_match': {'fields': ['author_name',
                                                         'title^5',
                                                         'title_ngram',
                                                         'title.ngram',
                                                         'title.stemmed',
                                                         'text^3',
                                                         'text.stemmed',
                                                         'keywords',
                                                         'keywords.stemmed',
                                                         'categories',
                                                             'categories.stemmed'],
                                              'fuzziness': 'AUTO',
                                              'query': u'austrailia'}}]}},
 'size': 20}

我已经阅读了所有ES5文档,但仍然无法使其正常工作。

1 个答案:

答案 0 :(得分:1)

aust您不会获得某些内容,因为ngrams只有3个字母:"min_gram": "3", "max_gram": "3"aust由4个字母组成。如果您想要aust或更长的匹配项,请使用max_gram: 10或更大的内容。