我索引这样的文档:
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name_surname", "Cristiano Ronaldo");
jsonObject1.accumulate("teams", "Sporting Lizbon");
jsonObject1.accumulate("teams", "Manchester United");
jsonObject1.accumulate("teams", "Real Madrid");
jsonObject1.put("2014 rank", 1);
client.prepareIndex("company", "employee", "1").setSource(jsonObject1.toString()).execute().actionGet();
我可以搜索它,并通过以下查询获得成功:
QueryBuilder qb=QueryBuilders.matchQuery("2014 rank", 1);
SearchResponse searchResponse=client.prepareSearch().setQuery(qb).execute().actionGet();
但是wildCardQuery似乎不起作用:
QueryBuilder qb = QueryBuilders.wildcardQuery("name_surname","*naldo");
我认为分析器在索引时存在问题。空格是问题吗,如果是我该如何解决?
最佳答案
我修复了它,检查了this问题后可以使用wildCardQuery。
在索引文档之前,请使用以下设置。
Node node = nodeBuilder().client(true).settings(ImmutableSettings.settingsBuilder().loadFromSource(jsonBuilder()
.startObject()
.startObject("analysis")
.startObject("analyzer")
.startObject("steak")
.field("type", "custom")
.field("tokenizer", "standard")
.field("filter", new String[]{"snowball", "standard", "lowercase"})
.endObject()
.endObject()
.endObject()
.endObject().string())).clusterName("elasticsearch").node();