Home > Article > Backend Development > How to implement fuzzy query in php
"Fuzzy search" is a concept opposite to "precise search". As the name suggests, it means that the search system automatically performs fuzzy search based on synonyms of the keywords entered by the user, thereby obtaining more search results. Synonyms are configured by the system's administrative interface. If you configure "computer" and "computer" as synonyms and search for "computer", web pages containing "computer" will also appear in the search results. Fuzzy search is also a synonym search. The synonyms here are configured by the user through the "Synonym Dictionary" in "Search Management". When the user enters any word in the synonyms to search on the search page, as long as the "fuzzy search" checkbox is selected, all synonym information of the keyword will also be retrieved.
The following editor will bring you an implementation method of PHP fuzzy query (recommended). The editor thinks it’s pretty good, so I’ll share it with you now and give it as a reference. Let’s follow the editor to take a look
Pattern query
1. SQL matching pattern
2. Regular expressionMatching mode (generally not recommended)
SQL matching mode
1. Use sql matching mode , cannot use operator= or! =, instead use the operator LIKE or NOT LIKE;
2. Using sql matching mode, MYSQL provides 2 types of wildcard characters .
% represents any number of any characters (including 0)
_ represents any single character
3. Use sql matching mode, if the matching format does not contain the above The query effect of any one of the two wildcard characters is equivalent to = or! =
4. Use sql matching pattern. When matching, it is not case-sensitive
#查询用户名以某个字符开头的用户 #查询用户名以字符'l'开头的用户: l% SELECT * FROM user WHERE username LIKE 'l%'; #查询用户名以某个字符结尾的用户 #查询用户名以字符'e'结尾的用户:e% SELECT * FROM user WHERE username LIKE 'e%'; #查询用户名包含某个字符的用户 #查询用户名包含字符'o'的用户:%o% SELECT * FROM user WHERE username LIKE '%o%'; #查询包含三个字符的用户 SELECT * FROM user WHERE username LIKE '_'; #查询用户名第二个字符为o的用户:_o% SELECT * FROM user WHERE username LIKE '_o%';
Regular expression matching pattern
Wildcard (regular expression)
. Matches any single character
* matches 0 or more characters before it
x* means matches any number x character
[..] Matches any character in brackets
[abc] Matches character ab or c
[a-z] Matches any letter
[0-9] Matches any number
[0-9]*Match any number of any number
[a-z]*Match any number of letters
^ means starting with a certain character or string
^a means starting with the letter a
$ means ending with a certain character or string
s$ means ending with the letter s
Use regular expressions The operators used in the matching pattern are:
REGEXP or NOT REGEXP(RLIKE or NOT RLIKE)
Note: Regular expression matching pattern, its regular expression appears anywhere in the matching field,
Even if the pattern matches, there is no need to put a wildcard character on both sides to make it match;
If only the wildcard character . is used to match, assuming N, then the matching pattern means, greater than or equal to N;
How do you understand the above sentence?
That is to say
... Match data that is greater than or equal to 3 characters
.... Match data that is greater than or equal to 4 characters
#Query the user name with the character l Users starting with: ^l;
#regular expression writing
SELECT * FROM user WHERE username REGEXP '^l'; #sql匹配模式写法: SELECT * FROM user WHERE username LIKE 'l%'; #查询用户名正好是三个字符的用户:^...$; #sql匹配模式写法: SELECT * FROM user WHERE username LIKE '_'; #正则表达式写法 SELECT * FROM user WHERE username REGEXP '^...$';
The above is the detailed content of How to implement fuzzy query in php. For more information, please follow other related articles on the PHP Chinese website!