私はelasticsearch-dsl-py 0.0.5とhttps://github.com/HonzaKral/es-django-exampleの例をDjangoで使用しています。
私はDocTypeを持っています:
class PageDoc(DocType):
title = String(analyzer='snowball')
index = Index('my_index')
index.doc_type(PageDoc)
そして、以下の管理コマンドを使用してインデックスを更新します。Page
インデックスを作成しようとしている Django モデルです。
class Command(BaseCommand):
def handle(self, *args, **kwargs):
self.es = connections.get_connection()
index.delete(ignore=404)
index.create()
self.verbose_run(Page)
def verbose_run(self, model, report_every=100):
name = model._meta.verbose_name
print('Indexing %s: ' % name, end='')
start = time.time()
cnt = 0
for _ in streaming_bulk(
self.es,
(m.to_search().to_dict(True) for m in model.objects.all().iterator()),
index=settings.ES_INDEX,
doc_type=name.lower()):
cnt += 1
if cnt % report_every:
print('.', end='')
print('DONE\nIndexing %d %s in %.2f seconds' % (
cnt, name, time.time() - start
))
http://127.0.0.1:9200/my_index/_mapping?prettyの (簡略化された) 出力は次のとおりです。
{
"my_index" : {
"mappings" : {
"page" : {
"properties" : {
"title" : {
"type" : "string"
}
}
}
}
}
}
完全一致のクエリを実行できますが、ステミングが機能しません。Snowball アナライザーがタイトル フィールドに追加されないのはなぜですか?