1

我有以下型号,

class ProductKeyword(models.Model):
    name = models.CharField(max_length=100)
    product = models.ManyToManyField(Product, related_name="products")
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.name)

和搜索索引,

class ProductKeyWordIndex(indexes.SearchIndex, indexes.Indexable):

    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr="name")
    product = indexes.CharField(model_attr="product")

    autocomplete = indexes.EdgeNgramField()

    @staticmethod
    def prepare_autocomplete(obj):
        return " ".join((
            obj.name, obj.product
        ))

    def get_model(self):
        return ProductKeyword

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(
            date_created__lte=timezone.now()
        )

和视图集,

class ProductKeywordSearchView(HaystackViewSet):
index_models = [ProductKeyword]

serializer_class = ProductKeywordSerializer

和网址配置,

router = routers.DefaultRouter()
router.register(r'prod_key', ProductKeywordSearchView, base_name="prod-key-
search")


# The API URLs are now determined automatically by the router.
urlpatterns = [
    url(r'^', include(router.urls))
]

和 settings.py (干草堆配置)

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 
'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://localhost:9200/',
        'INDEX_NAME': 'bhkhata',
        'INCLUDE_SPELLING': True,
        'TIMEOUT': 300,
    },
}

我通过django shell保存数据,并检查数据是否成功保存在ProductKeyword模型中。

尝试使用以下搜索 api 获取结果,

 http://localhost:8090/api/hs/prod_key/?name=sayaabintel

但它返回一个具有 200 状态的空列表。

我是弹性搜索的新手,所以不确定是什么导致上面的 api 返回一个空列表,可能有一种可能性是我试图搜索的对象没有在弹性搜索中被索引,所以我应用了以下管理命令弹性搜索建立索引,

python manage.py update_index

但仍然返回一个空列表的 api

然后我尝试了以下,

python manage.py rebuild_index

仍然返回一个空列表

接着

python manage.py clear_index

还没有工作,返回一个空列表

那么我在这里缺少什么?我遵循了以下 drf-haystack 文档,

drf haystack 文档

提到,我正在使用

elastic search( version 5.4.0)
elastic search-dsl( version 5.3.0)
4

0 回答 0