一架梯子,一头程序猿,仰望星空!

Elasticsearch SQL全文搜索


ES SQL语法虽然支持like语句,但是like并不是使用全文搜索算法,ES SQL语句中主要通过MATCH函数实现全文搜索。

1.MATCH函数

语法:

MATCH(
    field_exp,   
    constant_exp 
    [, options]) 

说明:

  • field_exp - 需要搜索的字段
  • constant_exp - 需要搜索的关键词
  • options - 可选参数

2.全文搜索例子

POST /_sql?format=txt
{
    "query": "SELECT author, name FROM library WHERE MATCH(author, 'frank')"
}

说明:

查询library索引中author字段,匹配frank关键词的文档。

返回结果:

    author     |     name      
---------------+---------------
Frank Herbert  |Dune           

3.SQL相关度排序

通过SCORE()函数实现相关度排序

例子:

POST /_sql?format=txt
{
    "query": "SELECT author, name FROM library WHERE MATCH(author, 'frank') ORDER BY SCORE()"
}

也可以将相关度分数返回

例子:

SELECT SCORE(), * FROM library WHERE MATCH(name, 'dune') ORDER BY SCORE() DESC;