Hi All,
I want to support multiple keywords search as well as web2py's
built-in-search.
I've written one module which will check if in_built_search is called
or not.
* If in_built_search isn't called then search keywords in custom_module*
*def built_in_search(keywords):*
* """This module will return True if opertor*
* in built_in_search is used in keywords"""*
* search_operators = ['=', '!=', '<', '>', '<=', '>=',*
* 'starts with', 'contains', 'in', 'not in']*
* return any(operator in keywords for operator in search_operators)*
Code of SQLFORM.GRID in *controllers/default.py*
keywords = request.vars.keywords
if keywords and not built_in_search(keywords):
new_query, usr_company_exist = _custom_search_query(keywords,
field_dicts)
#field_dicts contains field_name and table attribute.
grid = SQLFORM.grid(query, create=allow_create,
orderby=~db.table_name.created_on,
showbuttontext=False, csv=False,
deletable=False,
maxtextlengths=textlengths,
searchable=True)
Here I am building query according to *request.vars.keywords*
I've written a custom module to search keywords on *selected attributes* as
:
It also searches on reference key (company_name)
*def _custom_search_query(keywords, field_dicts):*
* """This module will build search each keyword in keywords*
* in predefined table attributes"""*
* keys = keywords.strip()*
* user_company_exist = False*
* import time*
* start_time = time.time()*
* filters = []*
* print "\n Keywords", keys*
* words = keys.split(' ')*
* for field_name, db_table_attr in field_dicts.iteritems():*
* #check for company name*
* if field_name == 'company_name':*
* company = db(db.company.name.contains(keys)).select().first()*
* if company is not None:*
* filters.append(db_table_attr == company.id)*
* continue*
* all_words_filter = []*
* for word in words:*
* all_words_filter.append(db_table_attr.contains(word))*
* filters.append(reduce(lambda a, b: (a & b), all_words_filter))*
* return reduce(lambda a, b: a | b, filters)*
If I tried to search '*XYZ'* (First_name_of_company) in search box, then *it
gives me* *incorrect records.*
Actually It shows only 3 records.
*I've printed count of query in pdb.*
*(Pdb) db(query).count()139L*
*It is showing exact count as in database.*
If I tried to search '*XYZ Private' *(first and middle name of company) in
search box, then *It gives me correct records.*
*I've also printed query count in pdb.(Pdb) db(query).count()139L*
It also shows exact count as in database.
Does any one know why is it giving different results?
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.