List filter all

Hi,

I tried to use the list "filter all" feature with adding &fabrik_list_filter_all_22_com_fabrik_22=abc to my urls.
List params = "Advanced search : yes", and I selected the elements I want to include in search.
Elements params = "Include in list query : yes"

Yet, the results are random, for some keywords it works and returns the row, and sometimes it doesn't return the rows when the fields definitely contain the keywords I am searching for... and I cannot understand the logic behind it all...

Could you explain which params I have to check in list and elements ?
And also whet is the default logic of this feature, does it search "any of the words" or "the exact phrase" ?

Thanks for any help !
 
"Advanced Search" has nothing to do with "Search All".

What controls how Search All works is the "Extended Search All" (and associated default), and "Elements" (to include in the search).

The "Extended" mode radically changes how it works, by using MySQL's "MATCH ... AGAINST ..." boolean fulltext searching:

https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

We implement four modes - any, all, none, exact. When searching from the list itself, the user gets a choice of which mode. Doing it through the query string, it'll use the default (which itself defaults to "any of these terms").

One important thing to note about fulltext searching is that it is constrained by MySQL's minimum fulltext character length, which is typically 4. So won't work on terms of 3 or less. And you almost certainly don't want to change that. Full text indexes of 3 or less tend to get ginormously huge.

Boolean fulltext search is also case insensitive, and (kinda) accent insensitive.

We also append a * to all search terms, so the following would match 'foo', 'foobar', etc.

Code:
MATCH(`fab_main_test`.`name`) AGAINST ('foo*' IN BOOLEAN MODE) OR MATCH( `mqd3s_users_0`.`name`) AGAINST ('foo*' IN BOOLEAN MODE)

Without extended mode, we do a REGEXP (regular expression) search on each of the included fields, cast to lower case:

Code:
LOWER(`fab_main_test`.`name`) regexp LOWER('foo')  OR `mqd3s_users_0`.`name` regexp LOWER('foo'))

You can see what the search is doing by appending &fabrikdebug=1 to your URL with the search all, and looking at the getData query.

-- hugh
 
Thanks for your detailed reply.
When you say "One important thing to note about fulltext searching is that it is constrained by MySQL's minimum fulltext character length, which is typically 4. So won't work on terms of 3 or less."
Does that mean that extended search on terms of 3 or less could work right if we remove the textarea fields from the searched element list ?
 
We are in need of some funding.
More details.

Thank you.

Members online

No members online now.
Back
Top