2015-08-27 98 views
2

我已經收錄我的所有文件與模式這樣的嘶嘶聲:用數字搜索 - 蟒蛇 -

ID = ID(stored=True) 
Body = TEXT(analyzer=StemmingAnalyzer(), stored=False,field_boost=4.0) 
Name = TEXT(stored=True, field_boost=5.0) 
Brand= TEXT(StemmingAnalyzer(),stored=False, field_boost=4.0) 
... 

我的搜索模塊如下所示:

qp = MultifieldParser(["Name", "Body", "Brand", 
"Familia","Superpadre","Tags","ID"], schema=ix.schema) 

但是,當我搜索iphone 6,它是這樣查詢的:

<Top 20 Results for Or([Term('Name', u'iphone'), Term('Body', 
u'iphon'), Term('Brand', u'iphon'), Term('Familia', u'iphon'), 
Term('Superpadre', u'iphon'), And([Term('Tags', u'iphone'), 
Term('Tags', u'6')]), Term('ID', u'iphon')]) runtime=0.0327291488647> 

它只是搜索對於TAGS中的數字6,但不是名稱,品牌等。

請幫我在其他字段中搜索它嗎?

謝謝大家提前。

回答

0

在我的架構

StemmingAnalyzer(minsize=1) 
2

與單個字符所有關鍵詞被默認視爲停用詞在嗖而忽視解決了這個參數。這意味着所有的字母和數字都會被忽略。

停用詞是在處理自然語言數據(文本)之前或之後過濾掉的詞。 (ref)

您可以檢查StopFilterminsize = 2默認添加到預先定義的一組。

from whoosh.analysis import StemmingAnalyzer 
schema = Schema(content=TEXT(analyzer=StemmingAnalyzer(stoplist=None))) 

schema = Schema(content=TEXT(analyzer=StemmingAnalyzer(minsize=1))) 

class whoosh.analysis.StopFilter(
     stoplist=frozenset(['and', 'is', 'it', 'an', 'as', 'at', 'have', 'in', 'yet', 'if', 'from', 'for', 'when', 'by', 'to', 'you', 'be', 'we', 'that', 'may', 'not', 'with', 'tbd', 'a', 'on', 'your', 'this', 'of', 'us', 'will', 'can', 'the', 'or', 'are']), 
     minsize=2, 
     maxsize=None, 
     renumber=True, 
     lang=None 
     ) 

這樣你就可以通過重新定義您的模式,並去除StopFilter或者使用它與minsize = 1解決此問題