我有一个网络应用程序,可以搜索一些数据库,保存的某些数据是大写的,有些是大写和小写的,但是当搜索关键字时,我希望它忽略大小写,只显示匹配的结果这个单词。例如,我想搜索“ document_reference”而不必编写正确的保存方式,即“ Document_Reference”
有人告诉我要在索引中添加不区分大小写的代码,但不确定该怎么做或在其中添加,我试过了(在whoosh文档中找到了它)
class CaseSensitivizer(analysis.Filter): def __call__(self, tokens): for t in tokens: yield t if t.mode == "index": low = t.text.lower() if low != t.text: t.text = low yield t
这就是我的索引和查询解析器的样子
def open_index(indexDirectory): # open index and return a idex object ix = index.open_dir(indexDirectory) return ix def search_index(srch, ix): # Search the index and print results # ix = open_index(indexDirectory) results = '' lst = [] qp = MultifieldParser(['Text', 'colname', 'tblname', 'Length', 'DataType', 'tag_name'], schema=ix.schema, group=qparser.OrGroup) # qp = QueryParser('Text', schema=ix.schema) q = qp.parse(srch) with ix.searcher() as s: results = s.search(q, limit=None) for r in results: print('\n', r) lst.append(r.fields()) if(DEBUG): print('Search Results:\n', lst) print('\nFinished in search.py') return lst
当前,它只会提供与我在搜索栏中键入的内容完全匹配的结果,因此,如果我键入“ document”,但源实际上存储为“ DOCUMENT”,我将不会得到任何结果
我有一个Web应用程序,可以搜索一些数据库,保存的某些数据是大写的,有些是大写和小写的,但是当搜索关键字时,我希望它忽略大小写...
代替使用lower()或upper(),您可以使用casefold()进行字符串比较。
给出here的一个很好的例子。
>>> 'Hello'.lower() == 'hello'.lower()
True