2016-07-26 18 views
0

Ist es möglich, einen Index zu erstellen, der die Indexierung einer übergeordneten Eigenschaft einschränkt?ElasticSearch erstellt einen Index mit dynamischen Eigenschaften

Zum Beispiel

$ curl -XPOST 'http://localhost:9200/actions/action/' -d '{ 
    "user": "kimchy", 
    "message": "trying out Elasticsearch", 
    "actionHistory": [ 
    { "timestamp": 123456789, "action": "foo" }, 
    { "timestamp": 123456790, "action": "bar" }, 
    { "timestamp": 123456791, "action": "buz" }, 
    ... 
    ] 
}' 

Ich will nicht actionHistorybei allen indiziert werden. Wie kann das gemacht werden?

Für das obige Dokument, glaube ich, der Index als

$ curl -XPOST localhost:9200/actions -d '{ 
    "settings": { 
    "number_of_shards": 1 
    }, 
    "mappings": { 
    "action": { 
     "properties" : { 
     "user": { "type": "string", "index" : "analyzed" }, 
     "message": { "type": "string": "index": "analyzed" }, 
     "actionHistory": { 
      "properties": { 
      "timestamp": { 
       "type": "date", 
       "format": "strict_date_optional_time||epoch_millis" 
      }, 
      "action": { "type": "string", "index": "analyzed" } 
      } 
     } 
     } 
    } 
    } 
}' 

Würde properties von actionHistory erstellt werden würde, und ersetzen Sie es durch "index": "no" die richtige Lösung zu entfernen?

Dies ist ein Beispiel, aber meine aktuelle Situation sind Dokumente mit dynamischen Eigenschaften (dh enthält actionHistory verschiedene kundenspezifische, sich nicht wiederholende Eigenschaften über alle Dokumente) und meine Mapping-Definition für diese besondere Art hat über 2000 verschiedene Eigenschaften, so dass sucht extrem langsam (dh schlimmer als Volltextsuche aus der Datenbank).

+0

Hm, wie werden Ihre Suchabfragen erstellt, die "actionHistory" so unterschiedlich haben, dass sie schlechte Leistung haben? Verwenden Sie '_all' in Ihren Such- oder Feldnamen-Platzhaltern? –

+0

Ja, ich lasse Benutzer das 'query_string' Formular benutzen. –

+0

Das ist der Nachteil des Benutzers mit 'query_string' machen zu können, was er will. Dasselbe gilt für die Möglichkeit, dass Benutzer _andere benutzerdefinierte, sich nicht wiederholende Eigenschaften für alle Dokumente_ erstellen können. Sie können alle möglichen Probleme mit diesen beliebigen query_strings und mit allen Eigenschaften in Ihren Dokumenten haben. Ich würde vorschlagen, diese Freiheiten auf ein stabileres und vorhersehbares Cluster zu beschränken. –

Antwort

1

Sie können wahrscheinlich mit dynamic templates, passen auf alle actionHistory Unterfelder und setzen "index": "no" für alle von ihnen.

PUT actions 
{ 
    "mappings": { 
    "action": { 
     "dynamic_templates": [ 
     { 
      "actionHistoryRule": { 
      "path_match": "actionHistory.*", 
      "mapping": { 
       "type": "{dynamic_type}", 
       "index": "no" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Haben Sie Glück dabei? – Val

Verwandte Themen