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 web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.