当前位置: 首页 > 面试题库 >

Django Haystack中的EdgeNgramField最小和最大字母

江瀚昂
2023-03-14
问题内容

有没有一种方法可以限制Django Haystack索引中边缘ngram的大小?例如,我创建ngram如下:

#search_indexes.py
content_auto = indexes.EdgeNgramField(model_attr='name')

但我不想创建2个字母ngram,实际上我想将最小设置为4或5。

作为背景,我使用的是django-haystack / elasticsearch,并在heroku上使用了盆景。


问题答案:

您需要做的是覆盖Haystack的ElasticSearch后端中的搜索映射。

简而言之:扩展ElasticSearch后端,并直接替换或通过settings.py导入新模式映射进行替换。

from django.conf import settings
from haystack.backends.elasticsearch_backend import (ElasticsearchSearchBackend,
    ElasticsearchSearchEngine)

class MyElasticBackend(ElasticsearchSearchBackend):

    def __init__(self, connection_alias, **connection_options):
        super(ConfigurableElasticBackend, self).__init__(
                                connection_alias, **connection_options)
        MY_SETTINGS = {
            'settings': {
                "analysis": {
                    "analyzer": {
                        "ngram_analyzer": {
                            "type": "custom",
                            "tokenizer": "lowercase",
                            "filter": ["haystack_ngram"]
                        },
                        "edgengram_analyzer": {
                            "type": "custom",
                            "tokenizer": "lowercase",
                            "filter": ["haystack_edgengram"]
                        }
                    },
                    "tokenizer": {
                        "haystack_ngram_tokenizer": {
                            "type": "nGram",
                            "min_gram": 3,
                            "max_gram": 15,
                        },
                        "haystack_edgengram_tokenizer": {
                            "type": "edgeNGram",
                            "min_gram": 2,
                            "max_gram": 15,
                            "side": "front"
                        }
                    },
                    "filter": {
                        "haystack_ngram": {
                            "type": "nGram",
                            "min_gram": 3,
                            "max_gram": 15
                        },
                        "haystack_edgengram": {
                            "type": "edgeNGram",
                            "min_gram": 5,
                            "max_gram": 15
                        }
                    }
                }
            }
        }
        setattr(self, 'DEFAULT_SETTINGS', MY_SETTINGS)


class ConfigurableElasticSearchEngine(ElasticsearchSearchEngine):
    backend = MyElasticBackend

有关更完整的说明,请参阅我的文章,有关扩展ElasticSearch后端以自定义搜索映射。



 类似资料:
  • 本文向大家介绍字符串中最大和最小的单词-JavaScript,包括了字符串中最大和最小的单词-JavaScript的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个JavaScript函数,该函数接受字符串并返回一个带有两个字符串值的数组,它们应分别是字符串中最小和最大的单词。 例如- 如果字符串是- 那么输出应该是- 因此,让我们为该功能编写代码 示例 以下是代码- 输出结果 控制台中的

  • 问题内容: 我被分配编写一个程序,该程序读取一系列整数输入并打印-输入的最小和最大-以及偶数和奇数输入的数量 我想出了第一部分,但对如何使程序显示最大和最小感到困惑。到目前为止,这是我的代码。我怎样才能显示最小的输入呢? 问题答案: 最简单的解决方案是使用诸如和

  • 问题内容: 我想知道哪个是Javascript 对象允许的最小和最大日期。我发现最小日期大约是200000 BC,但是我没有得到任何参考。 有人知道答案吗?我只是希望它不依赖于浏览器。 最好以“纪元时间”(= 1970-01-01 00:00:00 UTC + 00的毫秒数)回答。 问题答案: 根据规范§15.9.1.1: Date对象包含一个数字,该数字指示毫秒内的特定时间点。这样的数字称为时间

  • 问题内容: 我有一个像这样的猫鼬计划… 我有2个问题… 当我尝试插入字符串“ abc”时,它会静默忽略此字段的插入。模式中的其余字段将成功插入。我的印象是它将抛出异常。有可能这样做吗? 如果我尝试插入5,它只是允许它,看来min和max根本没有起作用。 我想念什么? 问题答案: 该验证可以帮助你。下面是一个示例。 尝试插入时,出现以下错误 尝试插入时,出现以下错误

  • 我正在计划一个相机的属性,我需要一个计算机视觉系统。我必须检测图像中的一些字母数字区域,然后使用Tesseract和OpenCV用OCR转换它们。一个典型的例子是高速公路上的车牌识别(但在我的项目中,速度不是问题)。 为了得到可靠的OCR转换,我需要知道哪一个可以是文本的最小像素高度,以估计相机分辨率、镜头的距离和焦距。 出于这个原因,我想知道OpenCV和Tesseract库是否为文本的最小可靠

  • 问题内容: 我的代码没有给出错误,但是没有显示最小值和最大值。代码是: 我是否需要system.out.println()来显示它,否则返回应该起作用吗? 问题答案: 您正在调用方法,但不使用返回的值。