在使用Lucene的過程中,我有點失望。我沒有看到或理解我應該如何爲任何已經可以直接索引的Lucene分析器提供內容。或者我應該如何開始創建我自己的分析器...Lucene,索引已經/外部標記化的標記並定義了自己的分析過程
例如,如果我有一個List<MyCustomToken>
,它已經包含許多標記(實際上還有更多關於大寫等信息,我還想索引爲每個MyCustomToken上的功能)
如果我理解我讀過的東西,我需要子類化分析器,它將調用我自己的標記器子類TokenStream,在那裏我只需要提供一個public final boolean incrementToken()
來完成這項工作插入TermAttribute
@位置。
順便說一句,這裏就是我感到困惑=>這是的TokenStream中java.io.Reader的一個子類,並且因此僅能夠分析像一個文件,一個串中的流對象的...
如何能我繼續有我自己的文檔分析器,將消耗我的列表,而不是這個流媒體的?
看起來像整個Lucene API是建立在它首先開始分析一個非常低的水平是「角色」角度的想法上的,而我需要稍後開始使用它/插入已經標記的單詞或甚至表達式(單詞組)。
Lucene的用法的典型樣本都是這樣(從here拍攝):
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
// 1. create the index
Directory index = new RAMDirectory();
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, analyzer);
IndexWriter w = new IndexWriter(index, config);
addDoc(w, "Lucene in Action"); // BUT here i would like to have a addDoc(w, MyOwnObject)
addDoc(w, "Lucene for Dummies");
addDoc(w, "Managing Gigabytes");
addDoc(w, "The Art of Computer Science");
w.close();
[...]
private static void addDoc(IndexWriter w, String value) throws IOException {
Document doc = new Document();
doc.add(new Field("title", value, Field.Store.YES, Field.Index.ANALYZED));
// SO that i can add here my own analysis base on many fields, with them built from a walk through List or complex structures...
w.addDocument(doc);
}
PS:(我的Java/Lucene的知識仍然很差,所以我可能錯過了一些東西明顯關於讀者< =>列表模式?)
這個問題幾乎是和我一樣on lucene list
編輯: @Jilles van Gurp =>是的,你是對的,這是我想到的另一個問題,但首先希望找到一個更優雅的解決方案。所以,如果繼續下去,我仍然可以做一些序列化,將這個序列化的字符串作爲文檔提供給我自己的分析器,以及自己的標記器,然後反序列化並重新做一些基本的標記化(實際上,只是遍歷已經完成的標記...)順便說一句,它會添加一些更慢,更愚蠢的額外步驟,我本想避免...
關於這部分=>有人有最近的一個樣本(Lucene> 3.6)自定義標記提供所有Lucene索引必需的基礎數據?我看過這樣的發光令牌:
posIncrement.setPositionIncrement(increment);
char[] asCharArray = myAlreadyTokenizedString.toCharArray(); // here is my workaround
termAttribute.copyBuffer(asCharArray, 0, asCharArray.length);
//termAttribute.setTermBuffer(kept);
position++;
了爲什麼我在這裏的一部分,它是我用,即記號化我的文字一些外部庫,做兼職的詞性一些註釋,其他分析(可能會考慮表達識別或命名實體識別,還可能包括一些關於大寫等特殊功能),我想跟蹤一個Lucene索引(我感興趣的實際部分是索引和查詢,而不是分析的第一步,它幾乎來自Lucene庫僅Tokenising爲我已閱讀)。
(另外,我不認爲我可以從這些以前/早期步驟做一些更聰明,因爲我用許多不同的工具,不是所有的人都是Java或可以很容易地纏到Java)
,所以我想這有點令人傷心,因爲與文本打交道的Lucene對於單詞/標記(字符序列)是如此有界,而文本不僅僅是單個/孤立詞/令牌的並置...
謝謝你的回覆,看到更多的見解... – user1340802