集成django - haystack和django rest框架

时间:2016-06-15 07:41:43

标签: python django solr django-rest-framework django-haystack

我正在尝试与django-drf一起设置solr搜索引擎。 我为此目的使用drf_haystack。 我正在使用solr-tomcat6.但是我被困住了,我不知道我哪里出错了。每当我通过get调用执行搜索时,我都没有在django rest框架页面中得到任何响应。 我已完成本教程中提到的solr的所有设置 - https://www.digitalocean.com/community/tutorials/how-to-install-solr-on-ubuntu-14-04 在从

获取架构后,我还将我的架构放在conf文件夹中
python manage.py build_solr_schema

至于tomacat6,默认端口是8080我的settings.py看起来像 -

    HAYSTACK_CONNECTIONS = {
    'default': {
    'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
    'URL': 'http://localhost:8080/solr'
     },
     }

我的models.py很简单,标题为主键,Test为模型。看起来像 -

    class Test(models.Model):
        title = models.TextField(blank=True, primary_key=True)
        url = models.TextField(blank=True, null=True)
        price = models.TextField(blank=True, null=True)
        brief = models.TextField(blank=True, null=True)

        def __unicode__(self):
            return self.title

        class Meta:
            db_table = 'test'

我是使用solr的新手,我的index.py中可能有一个错误,我已在此处显示 -

    class TestIndex(indexes.SearchIndex, indexes.Indexable):
        text = indexes.CharField(document=True, use_template=True)
        title = indexes.CharField(model_attr='title')
        url = indexes.CharField(model_attr='url')
        price = indexes.CharField(model_attr='price')

        def get_model(self):
            return Test

       def index_queryset(self, using=None):
            return self.get_model().objects.all()

我已将序列化程序包含在视图中。这是我的views.py -

    class TestSerializer(HaystackSerializer):
        class Meta:
            index_classes = [TestIndex]

        fields = [
            "title","url","price","brief"
         ]


    class SearchView(HaystackViewSet):
        index_models = [Test]
        serializer_class = TestSerializer

最后我的urls.py看起来如下:

    router = routers.DefaultRouter()
    router.register("item/search", SearchView, base_name="item-search")

    urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(r"api/", include(router.urls))
     ]

我在网址中输入以下内容来执行搜索:     http://127.0.0.1:8000/api/item/search/?title__contains=Asus

这是一个空字典。请帮助我解决我的问题,也许有一个愚蠢的错误。

0 个答案:

没有答案