ElasticSearch - 获取不完整和复数的单词

时间:2014-05-13 17:25:42

标签: elasticsearch elastica

我有一个产品目录,我使用Elastica客户端在ElasticSearch中编制索引。

在实施搜索时,我在输入的搜索字词后添加了*,这样当whiswhisk类型的用户已经开始查看whisky的搜索结果时。

但我希望在poster时也显示posters的结果。

我能够使用snowball过滤器实现复数到单数结果。但要实现这一点,我必须删除*

这很糟糕,因为在输入完整的单词之前没有结果显示。

我有什么想法可以解决这个问题?我的分析器代码:(取自here

'analysis' => array(
    'analyzer' => array(
        'indexAnalyzer' => array(
            'type' => 'custom',
            'tokenizer' => 'whitespace',
            'filter' => array('lowercase', 'mySnowball')
        ),
        'searchAnalyzer' => array(
            'type' => 'custom',
            'tokenizer' => 'whitespace',
            'filter' => array('lowercase', 'mySnowball')
        )
    ),
    'filter' => array(
        'mySnowball' => array(
            'type' => 'snowball',
            'language' => 'English'
        )
    )
)

1 个答案:

答案 0 :(得分:0)

我选择了自定义功能。

我使用没有*的确切搜索词组进行搜索。我的代码查找结果计数。如果它是一个不完整的单词,它可能会返回一个空结果。所以我将*附加到结果查询并进行另一次搜索。

这使我的自动建议结果变慢,但功能正常。