haystack / elasticsearch:试图找到“s04e07”

时间:2013-11-25 16:04:56

标签: numbers elasticsearch django-haystack

我有一个奇怪的问题,haystack / elasticsearch试图找到存储在我的数据库中的电视剧集,基于这样的字符串:'s04e07',这意味着第4季第7集,是一种标准格式,但搜索索引有它的问题。

尝试一些不同的东西,看起来数字没有在EdgeNgramFields中编入索引。 在CharField中我只能找到精确的单词匹配,如'2013',如果包含在标题中,但我没有找到's04e07'的运气。

如何从索引中获取结果? 我怎么可能在haystack中更改硬编码的默认映射来正确索引我的东西?

1 个答案:

答案 0 :(得分:0)

我几天前写过关于干草堆的文章,我建议先读一下干草堆:

Django Haystack Distinct Value for Field

这不是直接的,但我的建议是一样的。停止使用干草堆。

Haystack带有一个outofthebox edgengram和ngram分析器,这很酷,除了这些分析仪几乎不能用于所有用例。

他们尤其不适合你,因为你正在混合数字和字符。

但我的第一个问题是,为什么你不能像这样索引数据:

"season":1
"episode":1

然后在搜索时分解用户搜索上述格式?

如果那是不可能的,你仍然可以手动PUT映射而不让haystack为你做(我建议高度,因为它的映射不正确)。使用elasticutils非常容易。

请记住,我认为在任何情况下,edgengram都不是你想要的。因为它只是边缘的克数,对自动填充最有用,例如,如果有人输入s04e并且你想显示可能的匹配列表。

因此,这取决于用户查询数据的方式。它总是上面的字符串整体,或字符串的一部分,或者他们有时会搜索e07而你想要用第7集显示所有季节?

这里的最后一种可能性是将其正常索引(haystack将选择雪球)并使用前缀查询/正则表达式查询来获得您想要的内容。