2013-03-05 26 views
1

使用Lucene.NET 2.9.4時出現問題。也許任何人都可以幫助我。在詞的開頭使用lucene和通配符

目前,當用戶輸入單詞開放我會自動更改搜索千卡至* 開放 *。我已經設置QueryParser.SetAllowLeadingWildcard(true);我知道,這可能是昂貴的...

我的文字是:

您可以使用菜單文件/打開,編輯現有的文件」當我用

打開 *打開作爲搜索詞,lucene找到文本。

當我使用* 打開 * lucene找不到該文本。

爲什麼不呢?領先的通配符有什麼問題?我想在開頭,結尾處和中間找到搜索詞。

我想搜索開放和...

  • FOO欄=>不匹配
  • 開放FOO欄=>匹配
  • testopen FOO欄= >匹配
  • testopening FOO欄=>匹配

我該怎麼做?

+0

我也在使用Lucene時遇到了一些意外/不一致的結果,但更多的時候是由於存儲和查詢分析器不匹配造成的。你確定你的數據是使用與你試圖搜索它相同的分析器來致力於Lucene嗎? – 2013-03-05 13:36:42

+0

是的,我確定。我只在我的程序中使用StandardAnalyzer .......新的StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29,this.StopWordFile); – Healy 2013-03-06 06:20:59

回答

1

每個默認的前導通配符都是禁用的,但是在Lucene> = 2.1的情況下,可以啓用它。

QueryParser不支持前導通配符(例如* ook),默認爲 。從Lucene 2.1開始,可以通過調用 QueryParser.setAllowLeadingWildcard(true)來啓用它們。請注意,這可能是 昂貴的操作:它需要完整掃描 索引中的標記列表,以查找與該模式匹配的標記列表。

見:Lucene FAQ

+0

請再次閱讀我的第一篇文章的第三行...你會看到,我已經知道了!但我不知道爲什麼一個領先的通配符意味着「一個或多個」字符,而一個完成通配符意味着「零個或多個」。 – Healy 2013-03-06 06:16:47

1

兩件事:

1)我想驗證Luke爲您提供了相同的結果作爲查詢的代碼。

2)「testopening foo bar」工作還是失敗?