elasticsearch,Entity Framework,elasticsearch" /> elasticsearch,Entity Framework,elasticsearch" />

Entity framework elasticsearch找不到实体

Entity framework elasticsearch找不到实体,entity-framework,elasticsearch,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("stat

我在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();

为什么?

分析字符串字段的索引默认值。因此,当您写入“status”=“New”时,它将使用标准的_分析器,分析后将写入为“New”

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


更多信息

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

标准分析仪

使用标准标记器构建standard类型的分析器 使用标准令牌筛选器、小写令牌筛选器和Stop 令牌过滤器

但是,术语查询在不进行分析的情况下匹配:

术语查询

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

因此,在您的情况下,当您索引字段状态时,它将变为“新”。但当你用一个术语查询搜索时,它是在寻找“新的”-它们不匹配。它们确实与通用搜索相匹配,因为通用搜索也使用标准分析器