我有一个产品目录,我使用Elastica客户端在ElasticSearch中编制索引。
在实施搜索时,我在输入的搜索字词后添加了*
,这样当whis
或whisk
类型的用户已经开始查看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'
)
)
)
答案 0 :(得分:0)
我选择了自定义功能。
我使用没有*
的确切搜索词组进行搜索。我的代码查找结果计数。如果它是一个不完整的单词,它可能会返回一个空结果。所以我将*
附加到结果查询并进行另一次搜索。
这使我的自动建议结果变慢,但功能正常。