elasticsearch无法找到实体

时间:2014-08-06 07:52:13

标签: entity-framework elasticsearch

我在ElasticSearch中有以下实体:

{
  "id": 123,
  "entity-id": 1019,
  "entity-name": "aaa",
  "status": "New",
  "creation-date": "2014-08-06",
  "author": "bubu"
}

我尝试查询status = New的所有实体,因此上面的实体应该出现在那里。 我运行这段代码:

qesponse.setQuery(QueryBuilders.termQuery("status", "New"));
return qResponse.setFrom(start).setSize(size).execute().actionGet().toString();

但它没有结果。

如果我使用此代码(一般搜索,而不是特定字段),我会得到上述实体。

qResponse.setQuery(QueryBuilders.queryString("New");
return qResponse.setFrom(start).setSize(size).execute().actionGet().toString();

为什么?

2 个答案:

答案 0 :(得分:0)

分析字符串字段的索引的默认值。因此,当您编写“status”=“New”时,它将使用standard_analyzer,并在分析后将其写为“new”。

因此,术语查询似乎不起作用,如果您希望按照指定的方式进行查询,请将该字段的映射写为“not_analyzed”。

了解更多信息。 link

答案 1 :(得分:0)

问题是术语查询与索引时使用标准分析器之间不匹配。除其他外,标准分析器在索引时对字段进行小写:

  

标准分析器

     

使用标准标记符构建标准类型的分析器   使用标准令牌过滤器,小写令牌过滤器和停止   令牌过滤器。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html

然而,Term查询在没有分析的情况下匹配:

  

定期查询

     

匹配包含术语(未分析)的字段的文档。   术语查询映射到Lucene TermQuery。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

因此,在您索引字段状态的情况下,它变为" new"。但是,当您使用术语查询进行搜索时,它正在寻找" New" - 他们不匹配。它们与一般搜索匹配,因为一般搜索也使用标准分析器。