我是弹性搜索的新手,我真的想在我的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()
答案 0 :(得分: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