gpt4 book ai didi

python - 如何将Elasticsearch与Django集成

转载 作者:行者123 更新时间:2023-12-02 22:42:27 25 4
gpt4 key购买 nike

我是elasticsearch的新手。我想将MySQL Data存储到elasticsearchDjango App中。但是我不知道从哪里开始。我看了一下Haystack教程,并将数据索引到elasticsearch中,但是如何查询该数据?

models.py

import json
from django.db import models
from django.contrib import admin
#------------------------------------------------------------------------------


class scrapedData (models.Model):
""" This a model for scraped data collected by eScraper"""

productMRP = models.FloatField() # Product MRP
image_urls = models.TextField() # Images URL's for image pipeline for downloading
productSite = models.URLField() # Product web-site URL
productDesc = models.TextField() # Product Description
image_paths = models.TextField() # Product images path on the local machine
productImage = models.TextField() # Product image URL's
productTitle = models.TextField() # Product title
productPrice = models.FloatField() # Product discounted price
hasVariants = models.BooleanField() # Product variants like : colors or sizes, True is if product has variants, False otherwise
productCategory = models.TextField() # Product category
availability = models.BooleanField() # Product availability ,True if product is in stock, False otherwise
productSubCategory = models.TextField() # Product sub-category
currency = models.CharField(max_length=3) # Product price currency
productURL = models.URLField(max_length=500) # Product page URL
updatedAt = models.DateTimeField(auto_now=True) # Time at which product is updated
createdAt = models.DateTimeField(auto_now_add=True) # Time at which product is created


class scrapedDataAdmin(admin.ModelAdmin):
"""scrapedData admin class"""

list_display = ('productTitle','productSite','updatedAt','createdAt',
'product_URL','product_Image','productMRP','productPrice','currency',
'productDesc','productCategory','availability',
'hasVariants','productSubCategory','image_paths','image_urls'
)

ordering = ('productSite',)


admin.site.register(scrapedData,scrapedDataAdmin)

seach_indexes.py
from haystack import indexes
from eScraperInterfaceApp.models import scrapedData

#------------------------------------------------------------------------------

class scrapedDataIndex(indexes.SearchIndex, indexes.Indexable):
"""
This is a index class for scrapedData model
"""

productMRP = indexes.CharField()
productDesc = indexes.CharField()
productTitle = indexes.CharField()
productPrice = indexes.CharField()
productCategory = indexes.CharField()
productSubCategory = indexes.CharField()
text = indexes.CharField(document=True, use_template=False) # This field is the primary field for searching within

def get_model(self):
"""
This is a haystack method to get model name for the APP
"""
return scrapedData

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

然后我使用以下命令将数据索引到elasticsearch中: python manage.py rebuild_index
当我尝试:
from pprint import pprint 
from haystack.query import SearchQuerySet


all_results = SearchQuerySet().all()
pprint(all_results)

输出为:
[
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'742')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'747')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'754')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'759')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'761')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'766')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'773')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'778')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'780')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'785')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'792')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'797')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'800')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'805')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'812')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'817')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'824')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'829')>,
<SearchResult: eScraperInterfaceApp.scrapeddata (pk=u'831')>,
'...(remaining elements truncated)...'
]

我想使用elasticsearch作为我网站的后端。因此,我需要根据productDesc,MRP,价格等执行不同类型的查询。

我怎么做?

最佳答案

由于SearchQuerySet().all()正在返回结果,因此看来您已经走了很多路。现在,您只需要添加一个过滤器即可仅获取所需的结果。

试试这个:

SearchQuerySet().filter(title="AN EXISTING TITLE")

并查看是否获得该标题的结果。

有关更多信息,请检查文档: searchqueryset_api

关于python - 如何将Elasticsearch与Django集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17549677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com