2013-10-01 100 views
1

在一个字段中,我想设置一个自定义分析器,该分析器具有自定义过滤器 - 专注于词干 - 因此“闪存卡”和“闪存卡”被阻止到相同的根,因此返回相同的结果使用弹性搜索进行填充

当我运行下面的查询,我得到的点击(伟大的),但“闪卡”和“闪存卡”,每个返回不同的结果:

{"query_string": { 
    "fields": ["description"], 
    "query": query 
    } 
} 

但是当我运行下面的查询我没有得到任何结果:

{"query_string": { 
    "fields": ["description.analyzed"], 
    "query": query 
    } 
} 

看看下面我的映射,我们看到description.analyzeddescription具有相同的配置 - 所以每个字段应该表现相同,并且应该发生?

如何确定分析仪正在使用?

我对指数映射:

{'mappings': { 
    'file': { # doc_type 
     'properties': { # properties for doc_type 
     'description': { # field called description 
      'type': 'multi_field', # to allow "sub fields" with different alalysers 
      'fields': { 
      'description': {'type': 'string', 'analyzer': 'my_analyser'}, 
      'analysed': {'type': 'string', 'analyzer': 'my_analyser'} 
      } 
     }, 
     } 
    } 
    }, 
    'settings': { 
     'analysis': { 
      'filter': { #declare my custin filters 
      'filter_ngrams': {'max_gram': 5, 'min_gram': 1, 'type': 'edgeNGram'}, 
      'filter_stop':{'type':'stop', 'enable_position_increments': 'false'}, 
      'filter_shingle':{'type': 'shingle', 'max_shingle_size': 5, 'min_shingle_size': 2, 'output_unigrams':'true'}, 
      'filter_stemmer' : {'type': 'stemmer', 'name': 'english'} 
      }, 
      'analyzer': { # declare custom analyzers 
      'my_analyser': { 
       'filter': ['standard', 'lowercase', 'asciifolding', 'filter_stop', 'filter_shingle', 'filter_stemmer'], 
       'type': 'custom', 
       'tokenizer': 'standard' 
      }, 
      } 
     } 
     } 
    } 

回答

2

在您的映射,您有分析两个“描述”和“分析”为“my_analyser”,但我假设“说明”分析仪应该实际上是默认的分析器或没有干扰这个问题的东西。

无论如何,如果您在索引映射中填充字段,则还需要在实际的查询文本上使用一个词干分析器。这就是为什么你得到不同的结果“闪存卡”和“闪存卡” - 因为你不是阻止你的查询字符串,你实际上执行两个不同的搜索。

我不知道有多好这一工程复杂QUERY_STRING查询,但你应该修改您的查询请求的样子:

{"query_string": { 
    "fields": ["description.analyzed"], 
    "query": query, 
    "analyzer": "my_analyzer"} 

或类似(请确保您指定的分析仪所产生的东西查询)。我非常肯定,ES不会试图找出您在搜索领域使用的分析器来分析您的查询,就像您可能期望的那样。相反,它会使用您设置的任何分析器作为默认值。

您还可以设置默认分析仪(实际上您可以使用不同的默认值进行索引和搜索) - 请查看http://www.elasticsearch.org/guide/reference/index-modules/analysis/