我正在研究从ElasticSearch
切换到SphinxSearch
的可能性。
SphinxSearch
有什么好处 - 全文搜索只是在非常好的水平上运行机器人。让它工作ElasticSearch
似乎不像我预期的那么容易。
在我的项目中,我有一个带有typeahead的搜索框,意味着我输入Clint E
并在第一个位置看到包含Clint Eastwood
的结果的下拉列表。输入robert down
,然后在第一个位置查看Robert Downey Jr.
。所有这些我用SphinxSearch
开箱即用,只提供我的数据库凭据和SQL查询来提取必要的字段。
另一方面,ElasticSearch
即使在阅读了Fuzzy Like This Query,matching,partial matching等其他内容后,我也无法获得令人满意的结果。很多信息,但它不会使任务更容易。我觉得我需要在搜索中获得博士学位才能让它在最简单的水平上工作。
到目前为止,我最终得到了这样的配置
{
"settings": {
"analysis": {
"analyzer": {
"stem": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"stop",
"porter_stem"
]
}
}
}
},
"mappings": {
"movies": {
"dynamic": true,
"properties": {
"title": {
"type": "string",
"analyzer": "stem"
}
}
}
}
}
查询看起来像这样:
{
"query": {
"query_string": {
"query": "clint eastw"
"default_field": "title"
}
}
}
但是在这种情况下搜索的质量根本不令人满意 - 回到我的例子,在我完全输入他的名字之前,它找不到Clint Eastwood
个人资料。
然后我尝试使用
{
"query": {
"fuzzy_like_this": {
"fields": [
"title"
],
"like_text": "clint eastw",
"max_query_terms": 25,
"fuzziness": 0.5
}
}
}
它有帮助,但不多,现在我可以通过较短的请求clint eastwo
找到我需要的内容,并在使用clint eastw
的参数进行一些操作后,但仍然没有鼓励。
所以我想知道,是否有一个简单的方法如何使用ElasticSearch
烹饪全文搜索并获得相当不错的结果质量。我花了一天时间阅读但没有找到解决方案。
一些图像来展示我在说什么:
弹性,名称几乎完整但没有预期的结果,请注意也没有更好的匹配。
之后的一封信,弹性发现它!
同时,斯芬克斯闪耀着光芒:)。
答案 0 :(得分:0)
Elasticsearch附带自动completion suggester。 您无需将其置于查询功能中,它的工作方式是在令牌级别而不是部分令牌级别。 去完成建议,它也支持模糊逻辑。