2016-09-21 2 views
0

Wir setzen Suche Firmenliste Elasticsearch verwenden, aber es ist nicht, was wir erwartetElasticsearch Optimizing Abfrage

**Example companies:**  
Infosys technologies   
Infosys technologies ltd   
Infosys technologies pvt ltd   
Infosys technologies Limited   
Infosys technologies Private Limited   
BAC Infosys ltd 

Szenario:

  1. Wenn das Stichwort "Infosys" suchen soll es zurückgeben „Infosys Technologien " Liste.

  2. Bei der Suche nach dem Stichwort "Infosys ltd" sollte "Infosys Technologien" Liste zurückgeben.

  3. Bei der Suche nach dem Schlüsselwort "BAC Infosys ltd" sollte "BAC Infosys ltd" -Liste zurückgegeben werden.

Die folgenden Einstellungen und Mapping verwendet

{ 
    "settings": { 
     "analysis": { 
     "filter": { 
      "nGram_filter": { 
       "type": "nGram", 
       "min_gram": 3, 
       "max_gram": 3, 
       "token_chars": [ 
        "letter", 
        "digit", 
        "punctuation", 
        "symbol" 
       ] 
      } 
     }, 
     "analyzer": { 
      "nGram_analyzer": { 
       "type": "custom", 
       "tokenizer": "keyword", 
       "filter": [ 
        "lowercase", 
        "asciifolding", 
        "nGram_filter" 
       ] 
      }, 
      "keyword_analyzer": { 
       "type": "custom", 
       "tokenizer": "keyword", 
       "filter": [ 
        "lowercase", 
        "asciifolding" 
       ] 
      } 
     } 
     } 
    }, 
    "mappings": { 
     "companies": { 
      "properties": { 
       "company_name": { 
        "type": "string", 
        "store": "true", 
        "index_analyzer": "nGram_analyzer", 
        "search_analyzer": "keyword_analyzer", 
        "null_value": "null" 
       } 
      } 
     } 
    } 
} 

Abfrage:

{"query": 
    { 
     "bool": { 
     "must": [ 
      { "match": { "company_name": "Infosys technologies" }} 
     ], 
     "minimum_should_match": "80%" 
     } 
    } 
} 

Bitte helfen Sie mir, wie dies zu erreichen.

Antwort

0

Ihnen fehlen einige Dinge sowohl in Bezug auf die Suchabfragen als auch auf die Mappings. Betrachten Sie Ihre Szenarien und verwenden Sie Ihre aktuellen Einstellungen 1) Das Ergebnis wird auch BAC-Wert haben. Sie sollten zu Rand-N-Grammen wechseln. Aber das wird Ihnen nicht erlauben, zwischen zu suchen. 2) Es hängt auch ab, welche Art von Suche Sie erstellen, können Sie die Anordnung vermeiden, die ich in 1 vorgeschlagen. Für Ihre alle Szenarien können Sie davon ausgehen, Ihre Liste kann BAC-Wert auch im Ergebnis für Szenarien, sondern niedriger in der Liste. Dazu können Sie Abfrage mit Fuzzy für Rechtschreibprüfungen verwenden.

Über drei Szenarien erklären Sie mir nicht die ganze Funktionalität und verwendet-Cases für Ihre Suchfunktion, aber ich denke, Näherungssuche von elastischen bietet Ihnen mehr Flexibilität, um Ihre Fälle zu erfüllen.

+0

Können Sie mir irgendein Beispiel geben, weil ich neu bei Elasticsearch bin. Bitte helfen Sie mir – azhagu