2013-01-04 18 views
7

Aşağıdaki komutu kullanarak mongodb-nehir kullanarak elasticsearch mongodb indekslemeye çalışıyorum ama belge haritalama etkili olmayacaktır. Hala bu alanda textharitalama etkisi etkin değil

Mongodb-river belge endeksi oluşturulmasını belirtir ancak özel eşleştirme sağlamak için nasıl bir kayıt yoksa varsayılan analizörü (standart) kullanıyor. Denediğim bu. Mongodb-nehrini kullanarak özel analizörlerin nasıl belirleneceğini bulabileceğim başka bir belge var mı?

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" 
       }   
     } 
    } 
}' 

Sorgu, uygun sonuç döndürür Tam kelimelerle arama yapıyorum ancak herhangi bir alt dize eşleşmesiyle eşleşmiyor. Ayrıca, destek faktörü etkisini göstermiyor.

Neyi yanlış yapıyorum?

cevap

8

Sen index settings (analizörü) ile ilk endeksinizi oluşturmak zorunda:

Sonra
"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 
       } 
      } 
     } 

Eğer türü için define a mapping yapabilirsiniz:

"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" 
      }   
    } 
} 

Ve ancak o zaman, sen nehir oluşturabilirsiniz: o

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"} } 

yardımcı olur mu?

+0

Çok teşekkürler. Benim için çalıştı. – Rahul

+0

Çok teşekkürler adamım! Bu gerçekten çalışır =) – rusllonrails