Current state: [One of "Under Discussion", "Accepted", "Rejected"]
Discussion thread:
JIRA or Github Issue:
Released: <Doris Version>
Google Doc: <If the design in question is unclear or needs to be discussed and reviewed, a Google Doc can be used first to facilitate comments from others.>
For text data, such as log, commodity description, OLAP users need to search in the text. For example search error logs that contains 'ERROR', 'Exception' keywords.
Currently, users use LIKE SQL function for text pattern matching in Doris and most OLAP databases. But LIKE is not slow since all rows need to be checked against the search pattern.
In information retrieve area, fulltext search is a mature solution to find the content that match a given query. It's widely used by web search engine.
Elasticsearch support distributed fulltext search capability based on the open source search library lucene.
Some database, eg. MySQL, PostgreSQL, also add inverted index to support fulltext search.
In fact, the BITMAP index in Doris is a simple inverted index. But it lack text tokenization, efficient dictionary, search query syntax to support mature fulltext search.
CREATE TABLE httplogs (
ts datetime,
clientip varchar(20),
request string,
status smallint,
size int,
INDEX idx_size (size) USING INVERTED,
INDEX idx_status (status) USING INVERTED,
INDEX idx_clientip (clientip) USING INVERTED PROPERTIES("tokenizer"="none"),
) ENGINE=OLAP
DUPLICATE KEY(ts);
|
CREATE INDEX idx_request ON httplogs(request) USING INVERTED PROPERTIES("tokenizer"="english") |
SELECT * FROM httplogs WHERE request MATCH 'login'; |
SELECT * FROM httplogs WHERE status = 404; |
SELECT COUNT() FROM httplogs WHERE size > 1024; |
specific implementation steps and approximate scheduling.