【问题标题】:ElasticSearch: Full-Text Search made easyElasticSearch:让全文搜索变得简单
【发布时间】: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 Querymatchingpartial 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


    【解决方案1】:

    Elasticsearch 附带自动 completion suggester。 您无需将其放入查询功能中,它的工作方式是在令牌级别而不是在部分令牌级别。 去完成提示,它也支持模糊逻辑。

    【讨论】:

    • 感谢您的回答。我刚试过,效果更好,当我为Clint Eastwood 输入Clint E 时,它确实会产生结果,但仍然没有乐趣,例如,当我输入Eastwood Clint 时它找不到那个人......再一次,Sphinx完成这项工作。
    • 看起来ElasticSearch 需要付出太多努力才能使其真正起作用。可能它功能更强大,但绝对不是为了快速入门:(
    猜你喜欢
    • 2014-11-04
    • 2020-03-10
    • 2021-01-24
    • 2020-03-07
    • 1970-01-01
    • 2017-11-15
    • 2017-03-16
    • 2015-02-11
    • 2012-09-04
    相关资源
    最近更新 更多