2014-02-19 14 views
9

Ich habe mit der einfachen Aufgabe der Indexerstellung zu kämpfen, das Ziel ist es, einen Index mit einem Analysator und einer Feldzuordnung zu erstellen. Wenn ich einen Index mit einem Analysator erstelle, kann ich mit dem Analysator über die Analyse-API-Aufrufe sprechen, aber wenn ich die Zuordnungsinformationen hinzufüge, scheitert das Erstellen von Indexaufrufen mit "Analysator [Analysator1] nicht gefunden für Feld [$ field]]", I erstellt ein Skript, das Problem zu zeigen:Elasticsearch Indexerstellung mit Mapping

#!/bin/bash 

    INDEX_NAME="test1" 

    echo "delete index just to be sure" 
    curl -XDELETE "http://localhost:9200/$INDEX_NAME/"; echo 

    echo "create new index" 
    curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ 
     "index":{ 
      "analysis":{ 
       "analyzer":{ 
        "analyzer1":{ 
         "type":"custom", 
         "tokenizer":"standard", 
         "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] 
        } 
       }, 
       "filter":{ 
        "ngram":{ 
         "type":"ngram", 
         "min_gram":2, 
         "max_gram":15 
        } 
       } 
      } 
     } 
    }'; echo 

    echo "analyze something with our shiny new analyzer" 
    curl -XGET "localhost:9200/$INDEX_NAME/_analyze?analyzer=analyzer1&pretty=true" -d 'abcd' 

    echo "remove the created index" 
    curl -XDELETE "http://localhost:9200/$INDEX_NAME/"; echo 

    echo "create new index again with mapping" 
    curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ 
     "index":{ 
      "analysis":{ 
       "analyzer":{ 
        "analyzer1":{ 
         "type":"custom", 
         "tokenizer":"standard", 
         "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] 
        } 
       }, 
       "filter":{ 
        "ngram":{ 
         "type":"ngram", 
         "min_gram":2, 
         "max_gram":15 
        } 
       } 
      } 
     }, 
     "mappings": { 
      "product": { 
       "properties": { 
        "title": { 
         "type": "string", 
         "search_analyzer" : "analyzer1", 
         "index_analyzer" : "analyzer1" 
        } 
       } 
      } 
     } 
    }'; echo 

Antwort

13

ich Ihr Problem glauben, dass die analysis Einstellungen innerhalb eines settings Knoten in Ihrem JSON verschachtelt werden müssen, nicht innerhalb eines index Knoten, wie Sie es haben. Einzelheiten zum Erstellen des JSON finden Sie unter Elasticsearch Create Index API.

Daher Ihr Index-Call schaffen sollte wie die aussieht wie folgt vor:

curl -X PUT "http://localhost:9200/$INDEX_NAME/" -d '{ 
    "settings":{ 
     "analysis":{ 
      "analyzer":{ 
       "analyzer1":{ 
        "type":"custom", 
        "tokenizer":"standard", 
        "filter":[ "standard", "lowercase", "stop", "kstem", "ngram" ] 
       } 
      }, 
      "filter":{ 
       "ngram":{ 
        "type":"ngram", 
        "min_gram":2, 
        "max_gram":15 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "product": { 
      "properties": { 
       "title": { 
        "type": "string", 
        "search_analyzer" : "analyzer1", 
        "index_analyzer" : "analyzer1" 
       } 
      } 
     } 
    } 
}'; 
Verwandte Themen