2013-01-04 14 views
7

Próbuję indeksu mongodb w elasticsearch przy użyciu mongodb-river za pomocą następującego polecenia, ale mapowanie dokumentu nie przynosi efektu. Wciąż używa domyślnego analizatora (standard) dla pola textmapowanie w tworzeniu indeksu w elastycznym przeszukiwaniu rzeki mongodb nie przynosi efektu

Mongodb-river Dokument określa tworzenie indeksu, ale nie ma dokumentacji dotyczącej sposobu tworzenia niestandardowego mapowania. Oto, co próbowałem. Czy istnieje jakakolwiek inna dokumentacja, w której mogę znaleźć jak określić niestandardowe analizatory itp. W użyciu mongodb-river.

curl -XPUT "localhost:9200/_river/autocompleteindex/_meta" -d ' 
{ 
    "type": "mongodb", 
    "mongodb": { 
     "host": "rahulg-dc", 
     "port": "27017", 
     "db": "qna", 
     "collection": "autocomplete_questions" 
    }, 
    "index": { 
     "name": "autocompleteindex", 
     "type": "autocomplete_questions", 
     "analysis" : { 
       "analyzer" : { 
        "str_search_analyzer" : { 
          "tokenizer" : "keyword", 
          "filter" : ["lowercase"] 
         }, 

         "str_index_analyzer" : { 
         "tokenizer" : "keyword", 
         "filter" : ["lowercase", "ngram"] 
        } 
       }, 
       "filter" : { 
        "ngram" : { 
         "type" : "ngram", 
         "min_gram" : 2, 
         "max_gram" : 20 
        } 
       } 
      } 
    }, 
    "autocompleteindex": { 
     "_boost" : { 
      "name" : "po", 
      "null_value" : 1.0 
     }, 
     "properties": { 
       "po": { 
        "type": "double" 
       }, 
       "text": { 
        "type": "string", 
        "boost": 3.0, 
        "search_analyzer" : "str_search_analyzer", 
        "index_analyzer" : "str_index_analyzer" 
       }   
     } 
    } 
}' 

Kwerenda zwraca odpowiednich wyników jest wyszukiwać według pełnych słów, ale nie pasuje dowolny fragment meczu. Współczynnik kryterium nie pokazuje również efektu.

Co robię źle?

Odpowiedz

8

Musisz utworzyć pierwszy indeks z index settings (analizatora):

"analysis" : { 
      "analyzer" : { 
       "str_search_analyzer" : { 
         "tokenizer" : "keyword", 
         "filter" : ["lowercase"] 
        }, 

        "str_index_analyzer" : { 
        "tokenizer" : "keyword", 
        "filter" : ["lowercase", "ngram"] 
       } 
      }, 
      "filter" : { 
       "ngram" : { 
        "type" : "ngram", 
        "min_gram" : 2, 
        "max_gram" : 20 
       } 
      } 
     } 

wtedy można define a mapping dla danego typu Państwo:

"autocomplete_questions": { 
    "_boost" : { 
     "name" : "po", 
     "null_value" : 1.0 
    }, 
    "properties": { 
      "po": { 
       "type": "double" 
      }, 
      "text": { 
       "type": "string", 
       "boost": 3.0, 
       "search_analyzer" : "str_search_analyzer", 
       "index_analyzer" : "str_index_analyzer" 
      }   
    } 
} 

i dopiero wtedy można utworzyć rzekę:

curl -XPUT "localhost:9200/_river/autocompleteindex/_meta" -d ' 
{ 
"type": "mongodb", 
"mongodb": { 
    "host": "rahulg-dc", 
    "port": "27017", 
    "db": "qna", 
    "collection": "autocomplete_questions" 
}, 
"index": { 
    "name": "autocompleteindex", 
    "type": "autocomplete_questions"} } 

Czy to pomaga?

+0

Wielkie dzięki. To zadziałało dla mnie. – Rahul

+0

Wielkie dzięki! To naprawdę działa =) – rusllonrails