2012-07-03 185 views
0

我有一個字段,它可能有撇號。 我希望能夠: 1.將值按原樣存儲在索引 中2.根據忽略任何省略號的值進行搜索。Lucene索引忽略撇號

我想使用的:

doc.add(new Field("name", value, Store.YES, Index.NO)); 
    doc.add(new Field("name", value.replaceAll("['‘’`]",""), Store.NO, Index.ANALYZED)); 

,如果我那麼做同樣的搜索我想它應該工作,並使用清除值索引/搜索和值是顯示時更換。

我錯過了這裏的任何其他考慮?

回答

0

直接對值執行replaceAll這是在Lucene中的一個不好的做法,因爲將您的標記化配方封裝在Analyzer中會更好。我也沒有看到在你的用例中添加字段的好處(見Document.add)。

如果你想存儲的原始值,但能夠在不撇號搜索簡單地聲明你的領域是這樣的:

doc.add(new Field("name", value, Store.YES, Index.ANALYZED); 

然後簡單地掛上一個自定義Tokenizer將取代單引號(我覺得Lucene的StandardAnalyzer已包含此轉換)。

如果您要存儲該字段的目的是使用突出顯示,則還應該考慮使用Field.TermVector.WITH_POSITIONS_OFFSETS

+0

感謝jspboix,我應該在哪裏以及如何連接自定義Tokenizer?我需要Tokenizer還是Analizer? – epeleg

+0

我接受這個答案,因爲它可能是正確的路要走。至於我自己,我結束了Q.中描述的兩個'.add'調用。 – epeleg