我想索引以下字段:
quick brown fox
因此,搜索完全所有3个单词以任何顺序将会命中,但只搜索一些单词(如'brown fox')将会错过。
换句话说,我想创建一个索引/查询,以便满足以下条件:
# input for field
quick brown fox
# hits
brown fox quick
fox quick brown
quick brown fox
...
# misses
quick brown
fox
quick brown fox red
...
似乎我必须制作一个自定义标记生成器才能执行此操作。将输入流分解为这些关键字排列的标记生成器。我不知道从哪里开始。我正在使用红宝石/轮胎。这是正确的想法吗?我如何制作自己的标记器?
答案 0 :(得分:1)
我会按字母顺序对这些单词进行排序,使用一些无法出现在单词中的分隔符将它们组合在一起,并将它们作为单个未分析的标记索引。因此,quick brown fox
将被编入索引为brown-fox-quick
。您需要在索引和搜索期间执行此操作。理想情况下,这可以通过分析仪完成,但我不知道任何分析器会为您做这样的事情。所以你需要编写自己的自定义分析器(作为java插件)或在elasticsearch之外的代码中实现这个逻辑。