标签: django-haystack

Django haystack multivalued不起作用

我已经为我的索引(haystack)添加了一个MultivaluedField,我需要搜索ManyToMany相关字段,但它不起作用.

该引擎是WHOOSH.

这是我的索引的样子:

 class PostIndex(SearchIndex):
     text = CharField(document=True, use_template=True)
     author = CharField(model_attr='author') 
     body = CharField(model_attr='body') 
     pub_date = DateTimeField(model_attr='publish') 
     regions = MultiValueField() 

 def prepare_regions(self, obj):
     return [region.name for region in obj.regions.all()]
Run Code Online (Sandbox Code Playgroud)

这就是我的模型的样子:

 class Post(models.Model):

     title           = models.CharField(_('title'), max_length=200)
     author          = models.ForeignKey(User, blank=True, null=True)
     body            = models.TextField(_('body'), )
     allow_comments  = models.BooleanField(_('allow comments'), default=True)
     publish         = models.DateTimeField(_('publish'), default=datetime.datetime.now)
     categories      = models.ManyToManyField(Category, blank=True)
     tags            = TagField()
     objects         = PublicManager()

     regions         = models.ManyToManyField(Region, blank=True)
Run Code Online (Sandbox Code Playgroud)

如果我使用SearchQuerySet().filter(region__in = words_list)它可以工作.问题是我不知道用户何时搜索某个区域或其他字段,因此我必须使用SearchQuerySet().filter(content__icontains = words_list).并且以这种方式找不到任何东西.

谢谢

谢谢!!

django multivalue whoosh django-haystack

6
推荐指数
1
解决办法
1743
查看次数

Django Haystack在两个(多个)字段上自动完成

我使用Haystack 1.2.6和Whoosh 2.4以及Django 1.3.假设我们有以下模型描述了一个假设的帖子.

Post(models.Model):
    title = models.CharField()
    body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我们建立了这样的post索引,用于在body字段上自动完成:

PostIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    content_auto = indexes.EdgeNgramField(model_attr='body')
Run Code Online (Sandbox Code Playgroud)

在彻底阅读了干草堆文档后,我无法找到是否可以在标题和正文字段上进行自动完成.

所以...是可能还是......?

python django whoosh django-haystack

6
推荐指数
1
解决办法
2145
查看次数

使用haystack和引擎Elasticsearch(Django)无法使用EdgeNgramField自动完成

我需要在模型字段中搜索子字符串值.我有一个Index和一个SearchQuerySet.

这是Elasticsearch配置.

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

}
Run Code Online (Sandbox Code Playgroud)

我的索引.

class ElementIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

    #model fields
    title_element = indexes.EdgeNgramField(model_attr='title')
    clean_content = indexes.EdgeNgramField(model_attr='clean_content')
    def get_model(self):
       return Element

    def index_queryset(self, using=None):
        """Used when the entire index for model is updated."""
        return Element.objects.filter(updatetime__lte=datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)

我的自定义搜索.

SearchQuerySet().filter(title_element=clean_value)
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,我有一个值"HolaMundoTest",如果我尝试通过'Hola'或'HolaM'搜索我找到了结果,但如果我尝试'Mundo'或'mundo'或'laMun'则没有匹配.

怎么了?我不明白.

来源http://django-haystack.readthedocs.org/en/v2.1.0/autocomplete.html

我在用:

  • -django 1.5.1
  • -django-草垛== 2.1.0
  • -elasticsearch-0.90.5
  • -pyelasticsearch == 0.6

谢谢你的回答 -

python django django-haystack elasticsearch

6
推荐指数
1
解决办法
1314
查看次数

在django中使用弹性搜索作为数据库

我想elastic-search在我的项目中用作数据库,我在django框架上构建.据我所知,elastic search与数据库一起使用的haystack地方elastic-search仅用于索引和快速检索问题.这里阐述了如何整合数据库,并elastic-searchhaystack不过,我想用elastic-search没有数据库,换句话说,我将索引的所有数据.我没有看到下面的内容,你可以elastic-searchdjango设置模块中用作数据库后端.

# settings.py
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'OPTIONS': {
        'read_default_file': '/path/to/my.cnf',
    },
}
Run Code Online (Sandbox Code Playgroud)

}

是不是只能elastic-search用模型层djangodjango-elasticsearch后端,在示例部分中,它按照我想要的方式进行,但我不知道它是首先存储在数据库中还是索引elastic-search或仅存储和索引elastic-search.

django-models django-haystack elasticsearch

6
推荐指数
1
解决办法
1791
查看次数

Haystack和Elasticsearch:限制结果数量

我有两台Haystack服务器:

  • Server1:已安装elasticsearch
  • Server2:这没有elasticsearch,查询是对Server1进行的

当我从Server2Server1发出查询时,我的问题是关于分页:

  • Server2Server1发出查询
  • Server1将所有结果发送回Server2
  • Server2进行分页

但这不是最优的,如果查询返回10.000对象,查询将会很慢.

我知道你可以向查询中发送一些值的弹性搜索(大小,)但我不知道这是否可以使用Haystack,我检查了文档并用Google搜索并没有发现任何内容.

  • 如何在Haystack中配置查询以接收10×10的结果?

编辑

  • 有可能,如果我做SearchQuerySet()[10000:10010]它只会要求这10项?
  • 或者它会询问所有项目然后过滤它们?

EDIT2

我在Haystack Docs上找到了这个:

它似乎是一个功能,做我正在尝试做的事情:

通过更改开始,结束或两个偏移来限制查询.

然后我试着做:

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()
sqs.query.set_limits(low=0, high=4)
sqs.filter(content='anything')
Run Code Online (Sandbox Code Playgroud)

结果是完整列表,就像我从不添加set_limit行一样

  • 为什么不工作?

django pagination django-haystack elasticsearch

6
推荐指数
1
解决办法
1728
查看次数

Django-Haystack +嗖嗖 - 拼写错误的建议可能吗?

我正在使用Whoosh和Django-Haystack.我想在用户输入错误的单词时使用查询建议.

也许你的意思是"独角兽"


是否有必要使用其他搜索引擎?或者我可以通过Whoosh成功实现这一目标吗?

python django full-text-search whoosh django-haystack

5
推荐指数
1
解决办法
633
查看次数

Django-haystack搜索#hashtag

我真的有干草堆的经验,但我们使用django-haystack进行搜索.目前搜索工作正常,但我刚刚将#hashtags添加到网站,我希望搜索工作以某种方式与hashtagged单词不同.

我现在拥有的:

  • 搜索"pizza"和"#pizza"的结果是相同的,我认为这是因为"#"在搜索中被省略为字符.

我想要完成的事情:

  • 搜索"#pizza"的结果应仅包含文本"#pizza".

希望有人能帮助我

python django solr django-haystack hashtag

5
推荐指数
1
解决办法
387
查看次数

haystack.exceptions.SearchBackendError:在任何search_indexes中均未找到任何字段。请在尝试搜索之前更正此问题

我正在尝试用Whoosh实现Haystack。

尽管一切似乎都配置良好,但我一直收到此错误。我得到错误:

haystack.exceptions.SearchBackendError: No fields were found in any search_indexes. Please correct this before attempting to search.
Run Code Online (Sandbox Code Playgroud)

...当我尝试做时。/manage.pyrebuild_index

组态:

HAYSTACK_SITECONF = 'myproject'
HAYSTACK_SEARCH_ENGINE = 'whoosh'
HAYSTACK_WHOOSH_PATH = cwd + '/whoosh/mysite_index'
Run Code Online (Sandbox Code Playgroud)

在我的项目的根文件夹中成功创建了whoosh / mysite_index目录。

* search_sites.py *

import haystack
haystack.autodiscover()
Run Code Online (Sandbox Code Playgroud)

* search_indexes.py *

from haystack.indexes import *
from haystack import site
from myproject.models import *

class ResearchersIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    name = CharFIeld(model_attr='name')

class SubjectIndex(SearchIndex):
    short_name = CharField(model_attr='short_name')
    name = CharField(model_attr='name')
    text = CharField(document=True, use_template=True)

class ResearchIndex(SearchIndex): …
Run Code Online (Sandbox Code Playgroud)

django search django-haystack

5
推荐指数
1
解决办法
1024
查看次数

如何配置Haystack/Elasticsearch来处理单词开头附近的收缩和撇号

我有一段时间试图在单词的开头或中间处理撇号字符.我能够处理占有欲的英语,但我也试图迎合法语并处理像"动作"这样的词,其中撇号字符出现在单词的开头而不是像"她的"那样.

通过haystack auto_query搜索"d action"将返回结果,但"d'action"不返回任何内容.如果我直接查询elasticsearch _search API(_search?q = D%27ACTION),我会得到"d'action"的结果.因此,我想知道这是否是干草堆引擎问题.

我的配置:

'settings': {
    "analysis": {
        "char_filter": {
            "quotes": {
                "type": "mapping",
                "mappings": [
                    "\\u0091=>\\u0027",
                    "\\u0092=>\\u0027",
                    "\\u2018=>\\u0027",
                    "\\u2019=>\\u0027",
                    "\\u201B=>\\u0027"
                ]
            }
        },
        "analyzer": {
            "ch_analyzer": {
                "type": "custom",
                "tokenizer": "standard",
                "filter": ['ch_en_possessive_word_delimiter', 'ch_fr_stemmer'],
                "char_filter": ['html_strip', 'quotes'],
            },
        },

        "filter": {
            "ch_fr_stemmer" : {
                "type": "snowball",
                "language": "French"
            },
            "ch_en_possessive_word_delimiter": {
                "type": "word_delimiter",
                "stem_english_possessive": True
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有ElasticsearchSearchBackend和BaseEngine的子类,所以我可以添加上面的配置:

class ConfigurableESBackend(ElasticsearchSearchBackend):
    # Word reserved by Elasticsearch for special use.
    RESERVED_WORDS = (
        'AND', …
Run Code Online (Sandbox Code Playgroud)

django django-haystack elasticsearch

5
推荐指数
1
解决办法
451
查看次数

Django elasticsearch传输错误没有找到查询

我按照教程:http : //krzysztofzuraw.com/blog/2016/haystack-elasticsearch-part-two.html http://www.techstricks.com/django-haystack-and-elasticsearch-tutorial/

一切正常但是当我尝试从搜索框中查询某些内容时,它显示没有找到结果,并且在控制台中出现此错误.

INFO base GET http://127.0.0.1:9200/haystack/_mapping [status:200 request:0.015s]
INFO base PUT http://127.0.0.1:9200/haystack [status:400 request:0.018s]
INFO base PUT http://127.0.0.1:9200/haystack/_mapping/modelresult [status:200 request:0.023s]
WARNING base GET http://127.0.0.1:9200/haystack/modelresult/_search?_source=true [status:400 request:0.005s]
Failed to query Elasticsearch using '(a)': TransportError(400, 'parsing_exception', 'no [query] registered for [filtered]')
Traceback (most recent call last):
  File "/home/alamin/.virtualenvs/msnb2/lib/python3.5/site-packages/haystack/backends/elasticsearch_backend.py", line 524, in search
    _source=True)
  File "/home/alamin/.virtualenvs/msnb2/lib/python3.5/site-packages/elasticsearch/client/utils.py", line 71, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/home/alamin/.virtualenvs/msnb2/lib/python3.5/site-packages/elasticsearch/client/__init__.py", line 569, in search
    doc_type, '_search'), params=params, body=body)
  File "/home/alamin/.virtualenvs/msnb2/lib/python3.5/site-packages/elasticsearch/transport.py", line 327, in …
Run Code Online (Sandbox Code Playgroud)

django django-haystack elasticsearch

5
推荐指数
1
解决办法
1141
查看次数