class fulltext_native extends base

phpBB's own db driven fulltext search, version 2

Constants

UTF8_HANGUL_FIRST

UTF8_HANGUL_LAST

UTF8_CJK_FIRST

UTF8_CJK_LAST

UTF8_CJK_B_FIRST

UTF8_CJK_B_LAST

Properties

$ignore_words from  base
$match_synonym from  base
$replace_synonym from  base
protected array $stats

Associative array holding index stats

protected array $word_length

Associative array stores the min and max word length to be searched

protected string $search_query

Contains tidied search query.

protected array $common_words

Contains common words.

protected array $must_contain_ids

Post ids of posts containing words that are to be included

protected array $must_not_contain_ids

Post ids of posts containing words that should not be included

protected array $must_exclude_one_ids

Post ids of posts containing at least one word that needs to be excluded

protected string $phpbb_root_path

Relative path to board root

protected string $php_ext

PHP Extension

protected config $config

Config object

protected driver_interface $db

Database connection

protected dispatcher_interface $phpbb_dispatcher

phpBB event dispatcher object

protected user $user

User object

Methods

search_backend($error)

No description

from  base
int
obtain_ids(string $search_key, int $result_count, array $id_ary, int $start, int $per_page, string $sort_dir)

Retrieves cached search results

from  base
null
save_ids(string $search_key, string $keywords, array $author_ary, int $result_count, array $id_ary, int $start, string $sort_dir)

Caches post/topic ids

from  base
destroy_cache($words, $authors = false)

Removes old entries from the search results table and removes searches with keywords that contain a word in $words.

from  base
__construct(bool|string $error, string $phpbb_root_path, string $phpEx, auth $auth, config $config, driver_interface $db, user $user, dispatcher_interface $phpbb_dispatcher)

Initialises the fulltext_native search backend with min/max word length

string
get_name()

Returns the name of this search backend to be displayed to administrators

string
get_search_query()

Returns the search_query

array
get_common_words()

Returns the common_words array

array
get_word_length()

Returns the word_length array

bool
split_keywords(string $keywords, string $terms)

This function fills $this->search_query with the cleaned user search query

bool|int
keyword_search(string $type, string $fields, string $terms, array $sort_by_sql, string $sort_key, string $sort_dir, string $sort_days, array $ex_fid_ary, string $post_visibility, int $topic_id, array $author_ary, string $author_name, array $id_ary, int $start, int $per_page)

Performs a search on keywords depending on display specific params. You have to run split_keywords() first

bool|int
author_search(string $type, bool $firstpost_only, array $sort_by_sql, string $sort_key, string $sort_dir, string $sort_days, array $ex_fid_ary, string $post_visibility, int $topic_id, array $author_ary, string $author_name, array $id_ary, int $start, int $per_page)

Performs a search on an author's posts without caring about message contents. Depends on display specific params

array
split_message(string $text)

Split a text into words of a given length

index(string $mode, int $post_id, string $message, string $subject, int $poster_id, int $forum_id)

Updates wordlist and wordmatch tables when a message is posted or changed

index_remove($post_ids, $author_ids, $forum_ids)

Removes entries from the wordmatch table for the specified post_ids

tidy()

Tidy up indexes: Tag 'common words' and remove words no longer referenced in the match table

delete_index($acp_module, $u_action)

Deletes all words from the index

index_created()

Returns true if both FULLTEXT indexes exist

index_stats()

Returns an associative array containing information about the indexes

get_stats()

No description

string
cleanup(string $text, string $allowed_chars = null, string $encoding = 'utf-8')

Clean up a text to remove non-alphanumeric characters

acp()

Returns a list of options for the ACP to display

Details

in base at line 33
search_backend($error)

No description

Parameters

$error

in base at line 51
int obtain_ids(string $search_key, int $result_count, array $id_ary, int $start, int $per_page, string $sort_dir)

Retrieves cached search results

Parameters

string $search_key

an md5 string generated from all the passed search options to identify the results

int $result_count

will contain the number of all results for the search (not only for the current page)

array $id_ary

is filled with the ids belonging to the requested page that are stored in the cache

int $start

indicates the first index of the page

int $per_page

number of ids each page is supposed to contain

string $sort_dir

is either a or d representing ASC and DESC

Return Value

int

SEARCH_RESULT_NOT_IN_CACHE or SEARCH_RESULT_IN_CACHE or SEARCH_RESULT_INCOMPLETE

in base at line 132
null save_ids(string $search_key, string $keywords, array $author_ary, int $result_count, array $id_ary, int $start, string $sort_dir)

Caches post/topic ids

Parameters

string $search_key

an md5 string generated from all the passed search options to identify the results

string $keywords

contains the keywords as entered by the user

array $author_ary

an array of author ids, if the author should be ignored during the search the array is empty

int $result_count

contains the number of all results for the search (not only for the current page)

array $id_ary

contains a list of post or topic ids that shall be cached, the first element must have the absolute index $start in the result set.

int $start

indicates the first index of the page

string $sort_dir

is either a or d representing ASC and DESC

Return Value

null

in base at line 241
destroy_cache($words, $authors = false)

Removes old entries from the search results table and removes searches with keywords that contain a word in $words.

Parameters

$words
$authors

at line 120
__construct(bool|string $error, string $phpbb_root_path, string $phpEx, auth $auth, config $config, driver_interface $db, user $user, dispatcher_interface $phpbb_dispatcher)

Initialises the fulltext_native search backend with min/max word length

Parameters

bool|string $error

is passed by reference and should either be set to false on success or an error message on failure

string $phpbb_root_path

phpBB root path

string $phpEx

PHP file extension

auth $auth

Auth object

config $config

Config object

driver_interface $db

Database object

user $user

User object

dispatcher_interface $phpbb_dispatcher

Event dispatcher object

at line 147
string get_name()

Returns the name of this search backend to be displayed to administrators

Return Value

string Name

at line 157
string get_search_query()

Returns the search_query

Return Value

string

search query

at line 167
array get_common_words()

Returns the common_words array

Return Value

array

common words that are ignored by search backend

at line 177
array get_word_length()

Returns the word_length array

Return Value

array

min and max word length for searching

at line 197
bool split_keywords(string $keywords, string $terms)

This function fills $this->search_query with the cleaned user search query

If $terms is 'any' then the words will be extracted from the search query and combined with | inside brackets. They will afterwards be treated like an standard search query.

Then it analyses the query and fills the internal arrays $must_not_contain_ids, $must_contain_ids and $must_exclude_one_ids which are later used by keyword_search()

Parameters

string $keywords

contains the search query string as entered by the user

string $terms

is either 'all' (use search query as entered, default words to 'must be contained in post') or 'any' (find all posts containing at least one of the given words)

Return Value

bool

false if no valid keywords were found and otherwise true

Performs a search on keywords depending on display specific params. You have to run split_keywords() first

Parameters

string $type

contains either posts or topics depending on what should be searched for

string $fields

contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched)

string $terms

is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words)

array $sort_by_sql

contains SQL code for the ORDER BY part of a query

string $sort_key

is the key of $sort_by_sql for the selected sorting

string $sort_dir

is either a or d representing ASC and DESC

string $sort_days

specifies the maximum amount of days a post may be old

array $ex_fid_ary

specifies an array of forum ids which should not be searched

string $post_visibility

specifies which types of posts the user can view in which forums

int $topic_id

is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched

array $author_ary

an array of author ids if the author should be ignored during the search the array is empty

string $author_name

specifies the author match, when ANONYMOUS is also a search-match

array $id_ary

passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered

int $start

indicates the first index of the page

int $per_page

number of ids each page is supposed to contain

Return Value

bool|int

total number of results

Performs a search on an author's posts without caring about message contents. Depends on display specific params

Parameters

string $type

contains either posts or topics depending on what should be searched for

bool $firstpost_only

if true, only topic starting posts will be considered

array $sort_by_sql

contains SQL code for the ORDER BY part of a query

string $sort_key

is the key of $sort_by_sql for the selected sorting

string $sort_dir

is either a or d representing ASC and DESC

string $sort_days

specifies the maximum amount of days a post may be old

array $ex_fid_ary

specifies an array of forum ids which should not be searched

string $post_visibility

specifies which types of posts the user can view in which forums

int $topic_id

is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched

array $author_ary

an array of author ids

string $author_name

specifies the author match, when ANONYMOUS is also a search-match

array $id_ary

passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered

int $start

indicates the first index of the page

int $per_page

number of ids each page is supposed to contain

Return Value

bool|int

total number of results

at line 1337
array split_message(string $text)

Split a text into words of a given length

The text is converted to UTF-8, cleaned up, and split. Then, words that conform to the defined length range are returned in an array.

NOTE: duplicates are NOT removed from the return array

Parameters

string $text

Text to split, encoded in UTF-8

Return Value

array

Array of UTF-8 words

at line 1411
index(string $mode, int $post_id, string $message, string $subject, int $poster_id, int $forum_id)

Updates wordlist and wordmatch tables when a message is posted or changed

Parameters

string $mode

Contains the post mode: edit, post, reply, quote

int $post_id

The id of the post which is modified/created

string $message

New or updated post content

string $subject

New or updated post subject

int $poster_id

Post author's user id

int $forum_id

The id of the forum in which the post is located

at line 1600
index_remove($post_ids, $author_ids, $forum_ids)

Removes entries from the wordmatch table for the specified post_ids

Parameters

$post_ids
$author_ids
$forum_ids

at line 1658
tidy()

Tidy up indexes: Tag 'common words' and remove words no longer referenced in the match table

at line 1721
delete_index($acp_module, $u_action)

Deletes all words from the index

Parameters

$acp_module
$u_action

at line 1765
index_created()

Returns true if both FULLTEXT indexes exist

at line 1778
index_stats()

Returns an associative array containing information about the indexes

at line 1790
protected get_stats()

No description

at line 1809
protected string cleanup(string $text, string $allowed_chars = null, string $encoding = 'utf-8')

Clean up a text to remove non-alphanumeric characters

This method receives a UTF-8 string, normalizes and validates it, replaces all non-alphanumeric characters with strings then returns the result.

Any number of "allowed chars" can be passed as a UTF-8 string in NFC.

Parameters

string $text

Text to split, in UTF-8 (not normalized or sanitized)

string $allowed_chars

String of special chars to allow

string $encoding

Text encoding

Return Value

string

Cleaned up text, only alphanumeric chars are left

at line 2035
acp()

Returns a list of options for the ACP to display