我对 Lucene (java) 中的编码有疑问。
在 Lucene 中编码如何?这是默认值,我该如何设置它?
或者Lucene并不关心它是什么编码,而只是在索引阶段如何将字符串添加到文档(java代码如下),然后在索引中搜索的问题?
换句话说,我必须担心输入文本是否是UTF-8并且查询也是UTF-8?
Document doc = new Document ();
doc.add (new TextField (tagName, object.getName () Field.Store.YES));
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
Lucene 以 UTF-8 存储术语。(参见 Lucene 的 BytesRef 类)Java 内部以 UTF-16 存储所有内容。(Java 的字符串是 UTF-16)。因此,Lucene 的 BytesRef 为您提供了一个构造函数,用于将 UTF16 转换为 UTF8。因此Java的String可以毫无问题地使用。
例如,您在代码中使用的 TextField 使用 String 作为 Field 值。如果您有其他类型的字段需要 byte[],那么您需要确保它们是 UTF8 字节。
在查询时,Lucene 总是会给你 UTF-8 字节,但是你可以通过同一个类中提供的方法将其转换为 Java 的 String。你总是可以用其他字符集解释这些字节。
你必须自己处理字符编码——只要你能在 Java 的字符串中得到正确的字符,就应该没问题。例如:如果您要索引的数据来自具有 diff 字符集的 XML 或从具有 diff 字符集的 DB 中读取。您必须确保可以在用于索引的 JVM 中正确读取这些数据源。
归档时间: |
|
查看次数: |
2684 次 |
最近记录: |