Ich verwende Elasticsearch indizieren zwei Arten von Objekten -Elasticsearch Abfrageleistung
Daten Details
Contract Objekt ~ 60 Objekte (Objektgröße - 120 Byte) Risiko Item-Objekt ~ 125 Objekte (Objektgröße - 250 Byte)
Vertrag ist übergeordnete Risikoposition (_parent)
ich bin 240 Millionen solcher Objekte in einzelnen Index (210 Millionen Risikopositionen zu speichern, 30 Millionen Verträge)
Index Größe - 322 gb
Cluster Details
11 m2.4x.large EC2-Boxen [68 GB Speicher, 1,6 TB Speicher, 8 Kerne] (1 Box ein Lastverteilungs-Knoten mit node.data = false) 50 shards 1 Replika
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
ich die Elasticsearch Knoten mit folgendem Befehl bin ab - /home/ec2-user/elasticsearch-0.90.2/bin/elasticsearch -f -Xms30g -Xmx30g
Mein Problem ist, dass ich bin Es wird eine Abfrage nach dem Risikotyp ausgeführt, und es dauert etwa 10 bis 15 Sekunden, um Daten für 20 Datensätze zurückzugeben.
Ich führe dies mit einer Last von 50 gleichzeitigen Benutzern und einer Massenindexlast von ungefähr 5000 Risikoelementen, die parallel passieren.
Abfrage (mit Join Eltern-Kind)
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"
}
}]
}
}
}]
}
}
Abfragen aus einer Tabelle
Query1 (Diese Abfrage dauert ungefähr 8 Sekunden.)
<!-- 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"
}
}]
}
}
}
}
Kann mir bitte jemand helfen, wie ich diese Abfrageleistung verbessern kann?
Ich bin an der Antwort interessiert. Haben Sie andere Arten von Beziehungen zwischen Ihren Dokumenten versucht? Ich beziehe mich auf verschachtelte Objekte. Ich könnte falsch liegen, aber ich würde sagen, dass die Eltern-Kind-Beziehung eine Art "Query-Join" ist. Verschachtelte Objekte befinden sich im selben Lucene-Block, sodass sie für Suchanfragen möglicherweise schneller sind. – jackdbernier
Ich habe auch eine Frage ... Warum 'Xms30g -Xmx30g' und nicht mehr? – jackdbernier
Objekte sind sehr groß und verschachtelte Objekte benötigen viel Platz. – Vishal