我使用elasticsearch索引兩種類型的對象 -Elasticsearch查詢性能
數據細節
合同對象〜60點的屬性(對象大小 - 120個字節) 風險Item對象〜125點的屬性(對象大小 - 250個字節)
合同是
我存儲2.4億單指標2.1億風險的項目,對象(風險項目(_parent)的母公司, 30000000個合同)
指數大小爲 - 322 GB
羣集細節
11 m2.4x.large EC2盒[68 GB存儲器,1.6 TB存儲,8個內核(1盒是與node.data負載平衡器節點=假) 50碎片 1複製品
elasticsearch.yml
node.data: true
http.enabled: false
index.number_of_shards: 50
index.number_of_replicas: 1
index.translog.flush_threshold_ops: 10000
index.merge.policy.use_compound_files: false
indices.memory.index_buffer_size: 30%
index.refresh_interval: 30s
index.store.type: mmapfs
path.data: /data-xvdf,/data-xvdg
我開始了elasticsearch節點用下面的命令 - /home/ec2-user/elasticsearch-0.90.2/bin/elasticsearch -f -Xms30g -Xmx30g
我的問題是,我運行以下關於風險項目類型的查詢,並且返回數據需要大約10-15秒,對於20條記錄。
我使用50個併發用戶的負載和大約5000個風險項目的批量索引負載並行運行。
查詢(隨着加入父子)
的http://:9200/contractindex/riskitem/_search *
{
"query": {
"has_parent": {
"parent_type": "contract",
"query": {
"range": {
"ContractDate": {
"gte": "2010-01-01"
}
}
}
}
},
"filter": {
"and": [{
"query": {
"bool": {
"must": [{
"query_string": {
"fields": ["RiskItemProperty1"],
"query": "abc"
}
},
{
"query_string": {
"fields": ["RiskItemProperty2"],
"query": "xyz"
}
}]
}
}
}]
}
}
查詢從一個表
查詢1(這查詢大約需要8秒。)
<!-- language: lang-json -->
{
"query": {
"constant_score": {
"filter": {
"and": [{
"term": {
"CommonCharacteristic_BuildingScheme": "BuildingScheme1"
}
},
{
"term": {
"Address_Admin2Name": "Admin2Name1"
}
}]
}
}
}
}
**Query2** (This query takes around 6.5 seconds for Top 10 records (but has sort on top of it)
<!-- language: lang-json -->
{
"query": {
"constant_score": {
"filter": {
"and": [{
"term": {
"Insurer": "Insurer1"
}
},
{
"term": {
"Status": "Status1"
}
}]
}
}
}
}
有人可以幫助我如何提高此查詢性能?
我對答案也很感興趣。您是否嘗試過其他類型的文檔之間的關係?我指的是嵌套對象。我可能是錯的,但我會說父子關係是一種「查詢連接」。嵌套對象位於相同的Lucene塊中,因此搜索查詢可能會更快。 – jackdbernier
我也有一個問題......爲什麼'Xms30g -Xmx30g'而不是更多? – jackdbernier
對象非常大,嵌套的對象需要很大的空間。 – Vishal