Elasticsearch:在搜索简单的'a'字符时不会返回结果

时间:2013-07-30 10:27:34

标签: elasticsearch

我想在ElasticSearch中存储邮件的标签。我已经将tags字段定义为:

{
  'tags': {
    'type': 'string',
    'index_name': 'tag'
  }
}

对于消息,我在标签字段中存储了以下列表:

['a','b','c']

现在,如果我尝试使用以下查询搜索标记“b”,它会返回消息和标记:

{
  'filter': {
    'limit': {
      'value': 100
    }
  },
  'query': {
    'bool': {
      'should': [
        {
          'text': {
            'tags': 'b'
          }
        }
      ],
      'minimum_number_should_match': 1
    }
  }
}

标签'c'也一样。 但如果我用这个搜索标签'a':

{
  'filter': {
    'limit': {
      'value': 100
    }
  },
  'query': {
    'bool': {
      'should': [
        {
          'text': {
            'tags': 'a'
          }
        }
      ],
      'minimum_number_should_match': 1
    }
  }
}

它完全没有结果! 答案是:

{
  'hits': {
    'hits': [],
    'total': 0,
    'max_score': None
  },
  '_shards': {
    'successful': 5,
    'failed': 0,
    'total': 5
  },
  'took': 1,
  'timed_out': False
}

我做错了什么? ('a'是列表中的第一个元素并不重要,['b','a','c'也是如此。)似乎只有一个'a'字符存在问题

2 个答案:

答案 0 :(得分:1)

如果您未设置任何分析器并映射到索引,则默认情况下Elasticsearch会使用自己的分析器。 Elasticsearch的{​​{1}}具有停用词过滤器,默认忽略英语停用词,例如:

default_analyzer

在进行更多操作之前,请检查ElasticSearch映射和分析器指南:

答案 1 :(得分:0)

可能会涉及一些词汇或停止词汇列表。尝试确保不分析该字段。

'tags': {'type': 'string', 'index_name': 'tag', "index" : "not_analyzed"}

类似:matching whole string with dashes in elasticsearch