【发布时间】:2016-01-10 20:25:06
【问题描述】:
我正在研究从 SphinxSearch 切换到 ElasticSearch 的可能性。
SphinxSearch 有什么好处 - 全文搜索可以在相当不错的水平上使用机器人进行。让它在ElasticSearch 上工作似乎不像我预期的那么容易。
在我的项目中,我有一个带有预输入的搜索框,这意味着我输入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 进行全文搜索并获得不错的结果质量。我花了一天时间阅读,但没有找到解决方案。
几张图片来说明我在说什么:
Elastic,名称几乎完整但没有预期的结果,请注意也没有更好的匹配。
一个字母后,elastic 找到了!
同时狮身人面像闪耀:)
【问题讨论】:
标签: search elasticsearch full-text-search sphinx