【发布时间】:2014-04-22 04:37:13
【问题描述】:
我正在使用 ElasticSearch Java API 进行搜索。我有四个字段:
- 键
- 姓名
- 出生日期
- 地址
在搜索时,我使用以下查询:
QueryBuilder qb =QueryBuilders.queryString("Pritish");
这包括搜索时的键。另外,我不想选择文件为:
.fields("出生日期", "姓名", "地址")
有没有办法排除字段?我在寻找 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
}
}
}
}
现在,当我执行搜索查询时,它仍然向我显示针对键搜索的结果。
我不确定出了什么问题。有人可以帮忙解决这个问题吗?
【问题讨论】:
-
您想控制您正在搜索的字段或返回的字段吗?
-
只是出于好奇,你为什么不想返回第四个字段。是性能吗?另一个原因?
-
我想在搜索时控制字段。返回时我不控制任何字段。现在,我的密钥是随机 UUID。如果我搜索 abc 或 123,它正在搜索地址和密钥,并给我不必要的结果。
标签: elasticsearch