我最近尝试从 MySQL 全文搜索迁移到 ElasticSearch,我对翻译一些查询有点困惑。
我有这个查询。
"SELECT * FROM Books WHERE MATCH (description) AGAINST ('+Harry +Potter' IN BOOLEAN MODE)"
这意味着“Harry”和“Potter”必须同时出现在描述栏中,无论顺序或位置。(为了举例,请假设“Harry”和“Potter”可以相互独立。)
我尝试使用 ElasticSearch
{
"query": {
"query_string": {
"query": "Harry Potter",
"fields": ["description"]
}
}
}
但它仍然给出一些只包含“Harry”或“Potter”的结果。
这个我也试过
{
"query": {
"bool": {
"must" : {
"term" : { "description" : "Harry Potter" }
}
}
}
}
这个返回所有结果包含“Harry Potter”,而不是“Harry Bla Bla Bla Potter”和“Potter Bla Bla Bla Harry”。
什么是最简单(或者可能也是最快)的 ElasticSearch 查询,它返回与上面的 MySQL 查询相同的结果。
更新
我刚刚发现了这样的东西
{
"query": {
"match" : {
"description" : {
"query" : "Harry Potter",
"operator" : "and"
}
}
}
}
结果似乎是正确的。但是还有其他更常见的方法吗?