Link Search Menu Expand Document

The Open Distro project is archived. Open Distro development has moved to OpenSearch. The Open Distro plugins will continue to work with legacy versions of Elasticsearch OSS, but we recommend upgrading to OpenSearch to take advantage of the latest features and improvements.

Full-text search

Use SQL commands for full-text search. The SQL plugin supports a subset of the full-text queries available in Elasticsearch.

To learn about full-text queries in Open Distro, see Full-text queries.

Match

To search for text in a single field, use MATCHQUERY or MATCH_QUERY functions.

Pass in your search query and the field name that you want to search against.

SELECT account_number, address
FROM accounts
WHERE MATCH_QUERY(address, 'Holmes')

Alternate syntax:

SELECT account_number, address
FROM accounts
WHERE address = MATCH_QUERY('Holmes')
account_number address
1 880 Holmes Lane

Multi match

To search for text in multiple fields, use MULTI_MATCH, MULTIMATCH, or MULTIMATCHQUERY functions.

For example, search for Dale in either the firstname or lastname fields:

SELECT firstname, lastname
FROM accounts
WHERE MULTI_MATCH('query'='Dale', 'fields'='*name')
firstname lastname
Dale Adams

Query string

To split text based on operators, use the QUERY function.

SELECT account_number, address
FROM accounts
WHERE QUERY('address:Lane OR address:Street')
account_number address
1 880 Holmes Lane
6 671 Bristol Street
13 789 Madison Street

The QUERY function supports logical connectives, wildcard, regex, and proximity search.

Match phrase

To search for exact phrases, use MATCHPHRASE, MATCH_PHRASE, or MATCHPHRASEQUERY functions.

SELECT account_number, address
FROM accounts
WHERE MATCH_PHRASE(address, '880 Holmes Lane')
account_number address
1 880 Holmes Lane

Score query

To return a relevance score along with every matching document, use SCORE, SCOREQUERY, or SCORE_QUERY functions.

You need to pass in two arguments. The first is the MATCH_QUERY expression. The second is an optional floating point number to boost the score (default value is 1.0).

SELECT account_number, address, _score
FROM accounts
WHERE SCORE(MATCH_QUERY(address, 'Lane'), 0.5) OR
  SCORE(MATCH_QUERY(address, 'Street'), 100)
ORDER BY _score
account_number address score
1 880 Holmes Lane 0.5
6 671 Bristol Street 100
13 789 Madison Street 100