我正在使用ElasticSearch Java API进行搜索。我有四个 Realm :
在搜索时,我使用以下查询:
QueryBuilder qb = QueryBuilders.queryString(“Pritish”);
这包括搜索时的键。另外,我不想选择以下字段:
.fields(“DOB”,“名称”,“地址”)
有什么办法可以排除字段?我一直在寻找ParitalFields。这对我的情况有用吗?有人可以为此提供Java示例吗?
现在,我添加了如下映射:
/ ***************************** 创建索引 *************** *************** /
XContentBuilder mapping = jsonBuilder()
.startObject()
.startObject(indexName)
.startObject("properties")
.startObject("key")
.field("type", "string")
.field("index","not_analyzed")
.field("store", "false")
.endObject()
.startObject("addr1")
.field("type","string")
.endObject()
.startObject("DOB")
.field("type","string")
.endObject()
.startObject("name")
.field("type","string")
.endObject()
.endObject()
.endObject()
.endObject();
client.admin()
.indices()
.preparePutMapping(indexName)
.setType(indexName)
.setSource(mapping)
.execute()
.actionGet();
/ ********************** 插入数据 ********************** ******* /
XContentBuilder x = jsonBuilder()
.startObject()
.field("key", key)
.field("addr1", "abc road")
.field("DOB", "09092009")
.field("name","test")
.endObject();
bulk.add(client.prepareIndex(indexName, indexName).setSource(x));
/ ************* 搜索查询 ********************** /
QueryBuilder qb =QueryBuilders.queryString("*e434*");
SearchResponse response = client.prepareSearch(indexName)
.setQuery(qb)
.setFrom(0)
.setSize(100)
.execute()
.actionGet();
SearchHit[] results = response.getHits().hits();
当我看到索引元数据时,它向我显示了正确的映射,如下所示:
mappings: {
indexName: {
properties: {
addr1: {
type: string
}
name: {
type: string
}
key: {
index: not_analyzed
type: string
}
acct_type: {
type: string
}
}
}
}
现在,当我执行搜索查询时,它仍然向我显示对关键字进行搜索的结果。
我不确定出了什么问题。有人可以帮忙解决这个问题吗?
最佳答案
彻底阅读映射文档后,我终于在创建映射时发现了我的错误。我正在按如下方式创建键的映射(请参阅“问题”中的代码):
字段(“索引”,“未进行分析”)
阅读文档后,我将上面的行更改如下:
字段(“索引”,“否”)
我真的很感谢CodeSculptor的想法。现在,它正在按照我的要求工作。
非常感谢。
关于elasticsearch - Elasticsearch在搜索时排除一个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23165076/