如何使用 Elasticsearch 进行搜索

How to use search with Elasticsearch

我使用 python 2.7.11 和 djnago 1.10.2。我创建了产品模型并在我的数据库中保存了 1000 个产品。(postgrelsql)实际上,我使用了 Django elasticsearch 但它不起作用。它的搜索仅基于产品名称,如果搜索类别、颜色等,我需要。然后显示相关产品。我试过例子。

from haystack import indexes
from product.models import Product

class ProductIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    product_name = indexes.CharField(model_attr='product_name')
    product_colour = indexes.CharField(model_attr='product_colour')

    def get_model(self):
        return Product

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

我创建了 ProductColour 模型并在产品模型中使用了 product_colour 外键。如果我搜索 product_colour 然后显示所有相关数据。

遵循一些步骤:-

I used Django elasticsearch but its not working.

根据您的 haystack 设置,您没有使用 Elasticsearch。您使用的 SimpleEngine 根本不是真正的搜索引擎。要使用 Elasticsearch,您的设置必须包含以下内容:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack',
    },
}

请注意,haystack 不是搜索引擎本身。它只是一个在 Django 应用程序中使用多个搜索引擎的工具。你已经 installed elasticsearch 了吗?

我猜目前它不起作用,因为 SimpleEngine 无法正确处理您的 Many2ManyField

在您的 ProductIndex 中,您将 product_colour 定义为 CharField。但是您从 ProductColour 模型中引用了整个相关模型实例。使用 MultiValueField 来执行此操作:

from haystack import indexes
from product.models import Product

class ProductIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    product_name = indexes.CharField(model_attr='product_name')

    # use a MultiValueField for your m2m relation
    product_colours = indexes.MultiValueField()

    # define this method that returns all the values for your product_colours index field
    # it must be called "prepare_{your field name}"
    def prepare_product_colours(self, object):
        return [colour.name for color in object.product_colour.all()]

然后您将需要一个搜索索引模板,其中将生成 text 字段的内容 as described in the haystack documentation