2

我是弹性搜索的新手,我真的很想在我的 Django 项目中实现它。
我的问题:我想存储一个 Python dict 对象

 ({'key_1': 'value_1', 'key_2': 'value_2', [...]})  

并确保我的搜索将查看每个键。
在 Django 中,我使用Hstore字段,我可以访问我的数据

Model.objects.get(hstorefield__key='value')

有没有人知道使用弹性搜索来做到这一点,并确保我的 Hstorefield 的所有密钥都被跟踪?

感谢帮助 !

这是我的 Django 模型:

class Product(models.Model):

    code = models.BigIntegerField()
    url_off = models.URLField()
    creator = models.CharField(max_length=200)
    product_name = models.CharField(max_length=200)
    last_modified_t = models.DateTimeField()
    created_t = models.DateTimeField()
    metadatas = HStoreField()
4

1 回答 1

1

默认情况下,您在文档中索引到 elasticsearch 的任何和所有字段都将被索引并可用于搜索和过滤。您所要做的就是生成一个包含您的字段的文档HStoreField。如果您想控制这些字段的映射,您需要先定义它们,例如使用DocType(0) 类(类似于 django 的Model):

from elasticsearch_dsl import DocType, Long, Text, Keyword,Date, Object, InnerDoc

class Metadata(InnerDoc):
    meta_field = Text()
    meta_number = Long()
    ...

class Product(DocType):
    code = Long()
    creator = Text(fields={'keyword': Keyword()})
    last_modified_t = Date()
    metadata = Object(Metadata)
    class Meta:
        index = 'i'

# create the index in elasticsearch, only run once
Product.init()

然后你只需要在你的模型上创建一个方法,将它序列化到Product类中:

def to_search(self):
    return Product(
      _id=self.pk,
      code=self.code,
      creator=self.creator,
      metadata=Metadata(**self.metadatas)
    )

希望这可以帮助!

0 - http://elasticsearch-dsl.readthedocs.io/en/latest/persistence.html#doctype

于 2018-04-23T12:44:49.563 回答