3
例如,部件號的列表,包括:如何設置Lucene以便我可以搜索忽略空白字符?
JRB1000
JRB 1000
JRB1000
JRB100-0
-JRB1000
如果 'JRB1000' 用戶搜索,或「 JRB 1000'我想返回上面所有零件號碼的匹配項。
例如,部件號的列表,包括:如何設置Lucene以便我可以搜索忽略空白字符?
JRB1000
JRB 1000
JRB1000
JRB100-0
-JRB1000
如果 'JRB1000' 用戶搜索,或「 JRB 1000'我想返回上面所有零件號碼的匹配項。
編寫自定義Analyzer
,要麼這些拆分成多個令牌(JRB
,1000
;相對容易和寬容到用戶)或它們連接成一個單一的令牌(JRB1000
;硬但精確)。實現您自己的Analyzer
相當於覆蓋現有參數中的tokenStream
參數,並可能編寫自定義TokenFilter
類。
對正在建立索引和查詢的文檔應用新的Analyzer
。
(鏈接是爲Java版本,但.NET應該是相似的。)
如果你的分析只是刪除空格和破折號,然後用剩下的令牌,它可能就足夠了。 – 2010-10-13 07:01:04
「刪除空格」是指默認行爲(不起作用)或將所有內容視爲一個標記。這是'JRB1000' - >'JRB 1000'的情況,反之亦然,這造成了麻煩。 (除非部件號是單獨的字段?) – 2010-10-13 08:10:55
是部件號是一個單獨的字段。我設法獲得這主要與自定義分析器和標記器,刪除空格和破折號並使用結果作爲標記。這在搜索JRB1000時起作用,但是,儘管將自定義分析器傳遞給QueryParser,但它在搜索「JRB 1000」時仍然不起作用。我開始認爲Lucene可能不是這裏工作的正確工具,如果它所做的只是剝離索引中的空格和破折號,並且查詢我可以通過向我的數據庫添加查找表來輕鬆完成此操作。 – ChrisR 2010-10-13 12:26:48