ElasticSearch:EdgeNgrams和Numbers

Com*_*hat 6 python django-haystack elasticsearch

关于EdgeNgram如何处理数字的任何想法?

我正在使用ElasticSearch后端运行haystack.我创建了一个EdgeNgram类型的索引字段.该字段将包含一个字符串,其中可能包含单词和数字.

当我使用部分单词对该字段进行搜索时,它的工作方式如何.但如果我输入一个部分号码,我就得不到我想要的结果了.

例:

我通过输入"edgen"来搜索索引字段"EdgeNgram 12323",然后我将索引返回给我.如果我通过输入"123"搜索相同的索引,我什么也得不到.

思考?

小智 3

如果您使用的是edgeNGram tokenizer,那么它会将“EdgeNGram 12323”视为单个标记,然后对其应用edgeNGram'ing过程。例如,如果 min_grams=1 max_grams=4,您将获得以下索引标记:["E", "Ed", "Edg", "Edge"]。所以我想这不是您真正想要的 - 考虑使用 edgeNGram 令牌过滤器:

如果您使用的是edgeNGram标记过滤器,请确保您使用的标记生成器实际上标记了文本“EdgeNGram 12323”,以从中生成两个标记:[“EdgeNGram”,“12323”](标准或空白标记生成器将做这个伎俩)。然后应用旁边的edgeNGram 过滤器。

一般来说,edgeNGram 将采用“12323”并生成“1”、“12”、“123”等标记...

  • 没关系,我已经弄清楚了。小写分词器使用带有小写过滤器的字母分词器。此字母分词器不会将组合在一起的数字标记为一个数字,而是将其标记为单独的数字(例如:1453 将被标记为 1、4、5、3,而不是 1453)。我将其更改为使用标准分词器,并将小写过滤器添加到我的过滤器列表中,它起作用了! (4认同)