我正在使用ElasticSearch Java API進行搜索。我有四個領域:Elasticsearch在搜索時排除一個字段
- 關鍵
- 名
- DOB
- 地址
在尋找我使用下面的查詢:
QueryBuilder的QB = QueryBuilders.queryString(」 Pritish「);
這是搜索時包含的關鍵。另外,我不想選擇的Fileds爲:
點域(「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
}
}
}
}
現在,當我執行搜索查詢時,它仍然顯示我哪些搜索對鍵的結果。
我不確定發生了什麼問題。任何人都可以幫忙解決這個問題嗎?
你想控制你正在搜索的字段或返回的字段嗎? – javanna
只是出於好奇,爲什麼你不想返回第四場。它是性能嗎?另一個原因? –
我想在搜索時控制字段。在返回時,我不控制任何字段。現在,我的密鑰是隨機的UUID。如果我搜索abc或123,它正在搜索地址和密鑰,並給我不必要的結果。 –