search api возвращает пустой список, используя drf haystack для упругого поиска

У меня есть следующие модели,

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

и конфигурация URL,

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 и проверил, что данные успешно сохранены в 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,

документация по стогу сена

в упоминании, я использую

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

0 ответов

Другие вопросы по тегам