2017-02-19 5 views
0

Ich zog von elasticsearch 2.0 nach 5.2 und Ngram Suche ist jetzt gebrochen!Elasticsearch ngram Abfrage funktioniert nicht

Die Elasticsearch Setup ist nur unter, es ist nur ein einfacher ngram tokenizer für Titel und Ergebnisfelder.

settings = { 
    "settings": { 
     "number_of_shards": 1, 
     "number_of_replicas": 0, 
     "analysis": { 
      "filter": { 
       "ngram_filter": { 
        "type": "nGram", 
        "min_gram": 3, 
        "max_gram": 10 
       } 
      }, 
      "analyzer": { 
       "search_ngram_analyzer": { 
        "tokenizer": "standard", 
        "type": "custom", 
        "filter": ["standard", "lowercase", "stop", "asciifolding"] 
       }, 

       "index_ngram_analyzer": { 
        "tokenizer": "standard", 
        "type": "custom", 
        "filter": ["standard", "lowercase", "stop", "asciifolding", "ngram_filter"] 
       } 
      } 
     }, 

    }, 
    "mappings": { 
     "docs": { 
      "properties": { 
       'title': { 
        'boost': 100.0, 
        'search_analyzer': 'search_ngram_analyzer', 
        'analyzer': 'index_ngram_analyzer', 
        'type': 'text', 
       }, 
       'summary': { 
        'boost': 20.0, 
        'search_analyzer': 'search_ngram_analyzer', 
        'analyzer': 'index_ngram_analyzer', 
        'type': 'text', 
       } 
      } 
     } 

    } 
} 

http://localhost:9200/my_index/_search?q=example Rückkehr das Dokument mit Wort "Beispiel" in ihm. Wie eine normale Abfrage.

Jedoch geben http://localhost:9200/my_index/_search?q=exampl (mit dem "e" zum Beispiel) ein leeres Objekt zurück!

Ich finde den Fehler in meinem Setup nicht. Ist das eine API-Unterbrechung?

Antwort

3

Sind Sie sicher, dass dies in früheren Versionen funktioniert hat? Wenn Sie die URI-Suche verwenden und das Feld nicht angeben (wie in http://localhost:9200/my_index/_search?q=exampl), wird das Feld _all verwendet. Das verwendet den Standardanalysator, also gibt es keine Ngramme. Die Abfrage, die Sie verwenden möchten /my_index/_search?q=title:exampl ist

Aus Gründen der Reproduzierbarkeit, hier ist der Dump des gesamten Beispiel für Konsole:

PUT /my_index 
{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "ngram_filter": { 
      "type": "nGram", 
      "min_gram": 3, 
      "max_gram": 10 
     } 
     }, 
     "analyzer": { 
     "search_ngram_analyzer": { 
      "tokenizer": "standard", 
      "type": "custom", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "stop", 
      "asciifolding" 
      ] 
     }, 
     "index_ngram_analyzer": { 
      "tokenizer": "standard", 
      "type": "custom", 
      "filter": [ 
      "standard", 
      "lowercase", 
      "stop", 
      "asciifolding", 
      "ngram_filter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "docs": { 
     "properties": { 
     "title": { 
      "boost": 100, 
      "search_analyzer": "search_ngram_analyzer", 
      "analyzer": "index_ngram_analyzer", 
      "type": "text" 
     }, 
     "summary": { 
      "boost": 20, 
      "search_analyzer": "search_ngram_analyzer", 
      "analyzer": "index_ngram_analyzer", 
      "type": "text" 
     } 
     } 
    } 
    } 
} 


GET /my_index/_analyze 
{ 
    "analyzer": "index_ngram_analyzer", 
    "text": "example exampl" 
} 
GET /my_index/_analyze 
{ 
    "analyzer": "search_ngram_analyzer", 
    "text": "example exampl" 
} 

POST /my_index/docs 
{ 
    "title": "This is an example", 
    "summary": "Some more text" 
} 

GET /my_index/_search?q=example 
GET /my_index/_search?q=exampl 
GET /my_index/_search?q=title:exampl 

DELETE /my_index 
Verwandte Themen