仅匹配Elasticsearch中字符串中的第一个字母

时间:2013-09-12 03:44:59

标签: ruby elasticsearch tire

如何为以某个字母开头的构面返回匹配项?例如,Elasticsearch建议您使用查询"T*"来返回以字母T开头的所有标题。但是,这似乎返回包含以字母T开头的任何单词的标题。例如,“Trees and Shrubs” “还有”如何修剪树木。“我只想回归“树木和灌木丛”。我尝试使用"^T*",但返回SearchPhraseExecutionException。

1 个答案:

答案 0 :(得分:2)

默认情况下,elasticsearch 使用默认分析器分析字段,该字段将字段拆分为通常在英语字边界上拆分的标记。因此,“如何修剪树木”被分为(“如何”,“到”,“修剪”,“树木”),并且标记“树”随后匹配您的查询“T *”。为避免这种情况,您必须在对象mapping中指定该字段为not_analyzed。这使得elasticsearch有效地将字段值视为一个巨大的令牌,然后它将与您的前缀查询正确匹配。

您也可以查看prefix query,但这实际上只是发出相同查询的另一种方式。您仍需要指定在映射中不分析该字段。