Elasticsearch_dsl 中整数字段的范围查询
Range query in Elasticsearch_dsl by integer field
我使用了 elasticsearch-dsl==5.2.0
、elasticsearch==5.3.0
和 Django==1.8.15
。
Django 模型:
class Item(models.Model):
price = models.DecimalField(default=0)
def to_search(self):
return DocItem(
meta={'id': self.id},
price=self.price
)
文档类型class:
class DocItem(DocType):
price = Integer()
FacetedSearch class:
class ItemSearch(FacetedSearch):
index = 'item'
doc_types = [DocItem, ]
fields = ['price']
当我需要用 price == 5.0
搜索所有项目时,我会执行以下操作:
search = ItemSearch().search()
result = search.filter('match', price=5.0).execute()
问题:
如何搜索价格在 1.0 < price <= 5.0 范围内的所有商品?
你可以这样做:
search = ItemSearch().search()
result = search.filter('range', price={'gt': 1, 'lte': 5.0}).execute()
我使用了 elasticsearch-dsl==5.2.0
、elasticsearch==5.3.0
和 Django==1.8.15
。
Django 模型:
class Item(models.Model):
price = models.DecimalField(default=0)
def to_search(self):
return DocItem(
meta={'id': self.id},
price=self.price
)
文档类型class:
class DocItem(DocType):
price = Integer()
FacetedSearch class:
class ItemSearch(FacetedSearch):
index = 'item'
doc_types = [DocItem, ]
fields = ['price']
当我需要用 price == 5.0
搜索所有项目时,我会执行以下操作:
search = ItemSearch().search()
result = search.filter('match', price=5.0).execute()
问题:
如何搜索价格在 1.0 < price <= 5.0 范围内的所有商品?
你可以这样做:
search = ItemSearch().search()
result = search.filter('range', price={'gt': 1, 'lte': 5.0}).execute()