ElasticSearch:轻松进行全文搜索

时间:2015-10-13 07:32:10

标签: search elasticsearch full-text-search sphinx

我正在研究从ElasticSearch切换到SphinxSearch的可能性。

SphinxSearch有什么好处 - 全文搜索只是在非常好的水平上运行机器人。让它工作ElasticSearch似乎不像我预期的那么容易。

在我的项目中,我有一个带有typeahead的搜索框,意味着我输入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烹饪全文搜索并获得相当不错的结果质量。我花了一天时间阅读但没有找到解决方案。

一些图像来展示我在说什么:

弹性,名称几乎完整但没有预期的结果,请注意也没有更好的匹配。

Search 1

之后的一封信,弹性发现它!

Search 2

同时,斯芬克斯闪耀着光芒:)。

Search 3

1 个答案:

答案 0 :(得分:0)

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