2013-10-23 9 views
6

モデルフィールドで部分文字列値を検索する必要があります。私はインデックスとSearchQuerySetを持っています。haystackとengine Elasticsearch(Django)を使用してEdgeNgramFieldでオートコンプリートを実行しません

これはElasticsearchの設定です。

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 
     'URL': 'http://127.0.0.1:9200/', 
     'INDEX_NAME': 'haystack', 
    }, 

} 

マイ索引

class ElementIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 

    #model fields 
    title_element = indexes.EdgeNgramField(model_attr='title') 
    clean_content = indexes.EdgeNgramField(model_attr='clean_content') 
    def get_model(self): 
     return Element 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return Element.objects.filter(updatetime__lte=datetime.datetime.now()) 

私のカスタム検索。私は値「HolaMundoTest」を持っている、と私は「はいはい」や「HolaM」で検索しようとした場合、私は結果を見つけることが、私は「ムンド」または「ムンド」または 'しようとした場合、私のデータベースで

SearchQuerySet().filter(title_element=clean_value) 

laMun 'マッチはありません。

何が問題なのですか?わかりません。

ソースhttp://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html

私が使用しています:

  • -django 1.5.1
  • -django、干し草の山== 2.1.0
  • -elasticsearch-0.90.5
  • - pyelasticsearch == 0.6

ありがとうございましたans wers-

答えて

4

EdgeNgramFieldは、空白でトークン化し、クエリの文字で始まるテキストと一致するため、期待される動作です。

"laMun"または "mundo"というクエリの結果を得るには、EdgeNgramFieldではなくNgramFieldを使用する必要があります。

関連する問題