2016-04-21 11 views
0

Ich habe ein Problem, einen guten Vorschlag auf falsch geschriebene Ngrams zurückzugeben. Lässt mich im Detail erklären.Phrase Suggest elasticsearch

Betrachten Sie die folgende Abbildung mit einem Schindel Filter auf 'title' Feld:

PUT _template/test_news_flo 
{ 
"template": "test_articles_flo", 
"settings": { 
    "number_of_shards": 1, 
    "number_of_replicas": 2, 
    "analysis": { 
     "filter": { 
      "filter_shingle":{ 
       "type":"shingle", 
       "max_shingle_size":5, 
       "min_shingle_size":2, 
       "output_unigrams":"true" 
      } 

     }, 
     "analyzer": { 
      "analyzer_shingle":{ 
       "tokenizer":"standard", 
       "filter":["standard", "lowercase", "filter_shingle"] 
      } 
     } 
    } 
}, 
"mappings": { 
    "article": { 
     "_all": { "enabled": false }, 
     "properties": { 
      "title": { 
       "norms": { 
        "enabled": false 
       }, 
       "type": "string", 
       "fields": { 
        "shingle": { 
         "search_analyzer":"analyzer_shingle", 
         "index_analyzer":"analyzer_shingle", 
         "type":"string" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

In einem Dokument, das 'Carla Bruni' in den Index test_articles_flo

POST /test_articles_flo/article 
{ 
    "title": "Carla Bruni scintillante pour le Sidaction" 
} 

Dann führen Sie die folgenden vorschlagen Ausdruck Abfrage:

Das folgende Ergebnis wird zurückgegeben, whi ch ist genau das, was ich brauche:

 { 
     "text": "Carla bruno", 
     "offset": 0, 
     "length": 11, 
     "options": [ 
      { 
       "text": "carla bruni", 
       "score": 0.24166171 
      } 
     ] 
    } 

Jetzt noch einen Artikel hinzufügen:

POST /test_articles_flo/article 
{ 
    "title": "Le réveil de Massimo Bruno" 
} 

Dann suchen Sie erneut mit der vorschlagen: Es wird kein Vorschlag gegeben als ‚bruno‘ im Index zu finden ist und Elasticsearch hält es für als gültig.

Wissen Sie, wie ich den Vorschlag "Carla Bruni" als Vorschlag zurückgeben könnte?

Antwort

0

scheint es wie erwartet zu funktionieren, wenn ein direct_generator Zugabe:

hier ist die Abfrage

POST /test_articles_flo/_search/?size=0 
{ 
    "suggest": { 
     "suggest-phrase-title": { 
     "text": "jonnhy dep", 
     "phrase": {  
      "field": "title.shingle", 
      "confidence": 1, 
      "size": 5, 
      "gram_size": 2, 
      "max_errors": 5, 
      "direct_generator" : [ { 
       "field" : "title.shingle", 
       "suggest_mode" : "always", 
       "min_word_length" : 1 
      }], 
      "collate": { 
       "query": { 
        "match_phrase": { 
        "{{field_name}}": "{{suggestion}}" 
        } 
       }, 
       "params": { 
        "field_name": "title.shingle" 
       }, 
       "prune": false 
      } 
     } 
     } 
    } 
}