我正在使用whoosh來索引超過200,000本書。但我遇到了一些問題。 whoosh查詢解析器返回NullQuery的單詞,如「C#」,「C++」中包含元字符以及其他一些短單詞。這個詞在一些文檔的標題和正文中使用,所以我不使用它們的關鍵字類型。我想問題是在分析或查詢分析階段的搜索或索引,但我不能盲目地觸摸我的數據。任何人都可以幫助我解決這個問題。 TNX。whoosh不搜索諸如「C#」之類的短詞
'\ w + [#+ \ W] *'
這將使:
我用的是符合我的要求,這裏是正則表達式正則表達式模式建立一個StandardAnalyzer固定的問題將字段標記爲成功完成,並且搜索進行得很順利。 但是當我使用「some query ++ *」或「some ## *」這樣的查詢時,解析後的查詢將是單個每個查詢,只是'*'。我還發現這與我的分析儀無關,這是Whoosh的默認行爲。所以這裏是我的新問題:這是行爲正確還是錯誤?
注意:從查詢解析器中刪除WildcardPlugin解決了這個問題,但我還需要WildcardPlugin。
現在我用下面的代碼:
from whoosh.util import rcompile
#for matching words like: '.NET', 'C++' and 'C#'
word_pattern = rcompile('(\.|[\w]+)(\.?\w+|#|\+\+)*')
#i don't need words shorter that two characters so i don't change the minsize default
analyzer = analysis.StandardAnalyzer(expression=word_pattern)
...現在在我的架構:
...
title = fields.TEXT(analyzer=analyzer),
...
這將解決我的第一個問題,是的。但主要的問題在於搜索。我不想讓用戶使用Every
查詢或*
進行搜索。但是當我解析像C++*
這樣的查詢時,我最終得到了一個Every(*)
查詢。我知道有一些問題,但我無法弄清楚它是什麼。
感謝您的回答kichik。是的,您通過更改「StandardAnalizer」的minsize和expression參數是正確的,我們可以更改用於索引的接受令牌。但我改變了我的問題。 – 2013-05-04 20:32:46
嗯...現在有人能夠找出解決原始問題的方法?如果你打開一個新的問題而不是完全改變這個問題,情況會更好。 – kichik 2013-05-04 23:02:33