2010-09-24 92 views
4

我想索引像「New York」這樣的「複合詞」作爲單一術語而不是「new」,「york」。以這種方式,如果有人搜索「新地方」,包含「紐約」的文件將不匹配。在Lucene中索引n個單詞表達式作爲一個單詞術語

我認爲這不是N-grams(實際上是NGramTokenizer)的情況,因爲我不會索引任何 n-gram,我只想索引一些特定的n-gram。

我已經做了一些研究,我知道我應該寫我自己的分析器,也許我自己的Tokenizer。但是我有點遺憾的擴展TokenStream/TokenFilter/Tokenizer。

感謝

回答

1

我相信你有檢測要保留多字爲單位(MWUs)的一些方式。然後,你可以做的是用下劃線替換它們中的空格,並使用WhiteSpaceAnalyzer而不是StandardAnalyzer(這會拋出標點符號),也可能使用LowerCaseFilter

寫你自己Tokenizer需要相當一些Lucene黑魔法。我從來沒有能夠將自己的頭圍繞Lucene 2.9+ API,但如果你真的想嘗試,請查看TokenStream文檔。

0

我通過創建索引但未分析的字段來完成此操作。 爲此,我使用了Field.Index.NOT_ANALYZED > doc.add(new Field(「fieldName」,「value」,Field.Store.YES,Field.Index.NOT_ANALYZED,TermVector.YES));標準分析儀 。

我在Lucene 3.0.2上工作過。

+0

但是,每個字段只能包含一個複合詞,對嗎?由於該領域不會被分割成部分,Lucene會認爲所有領域都是一個單詞,對嗎? – 2010-09-30 03:48:39

+0

這是事實,該字段值不會被分割成部分。 給定字符串「一二三」作爲值將被存儲爲一個令牌。對我而言,這並不重要,因爲我存儲了由lingpipe提取的實體:一個實體 - 一個術語。 – Jakub 2010-09-30 05:19:37

相關問題