elasticsearch 在查詢的時候如何返回指定的欄位值?
如題
$p = array(
"index" =&> "my_product", //"id" =&> "1240", "type" =&>"product","_source" =&> false, //是否返回全部資源
"fields" =&> array( // 返回欄位
"pro_name", "pro_editdate" ) );請求es介面時制定fields 即可查詢語句"query"之前添加"_source"即可。也可以使用"exclude"來指定不返回某些欄位。例如,需要返回a和b欄位{ "_source": {
"include": [
"a", "b" ] }, "query": { "bool": { "must": [ { "term": {"欄位名": "值"
} } ] } }}返回的結果在"_source"中。如果欄位都返回量也不大的話, 可以用searchResponse.getHits() 得到全部, 然後分別選取各個欄位, 比如下面的代碼:
String lat = searchResponse.getHits().getAt(i).getSource()
.get("latitude").toString();
String lon = searchResponse.getHits().getAt(i).getSource()
.get("longitude").toString();
kibana 裡面可以這樣:
GET als_gthrdb_message_all/_search
{
"_source" : {
"includes" : [
"message_time",
"device_id",
"sender_mobileNo",
"message_content_filter"
],
"excludes" : [ ]
}
}
或者這樣
GET als_gthrdb_message_all/_search
{
"_source": ["message_time", "sender_mobileNo","device_id", "message_content_filter"]
}
對於的java api 是(它對應kibana語句中的第一個)
.setFetchSource(@Nullable String[] include, @Nullable String[] exclude)
eg: .setFetchSource(new String[]{"message_time", "device_id", "sender_mobileNo", "message_content_filter"}, null)
public SearchRequestBuilder setFetchSource(@Nullable String[] includes, @Nullable String[] excludes) {
sourceBuilder().fetchSource(includes, excludes);
return this;
}
看SearchRequestBuilder得這個方法,可以指定欄位,include和exclude
可以用_source來返回指定的欄位
官方答案:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html
如果source是默認設置的話,可以從默認返回的source中取對應欄位值 沒存source的話,調用API requstBuilder.addField(field)
另外一個問題,如果是aggr再post filter 怎麼做才能只返回post filter的值呢?也就是只返回json里的某些item?
隨便提一下,查詢如果指定了field,就只能通過結果裡面的filed來獲取內容了,原始的source就不返回了
在查詢時使用fields:Fields
推薦閱讀:
※如何通俗地、不用術語地解釋李彥宏的「超鏈分析」?
※如何聚合多個搜索引擎的結果?
※如何搜索到曾經在網上見過的圖片?
※如何通過簡單的網路搜索獲取一個人的資料信息?
※哪個搜索引擎的母親節 doodle 最漂亮?
TAG:搜索 | 搜索引擎 | Elasticsearch |