您的位置:首页 > 其它

一个辅助Lucene对数字类型进行索引和搜索的工具类

2006-12-23 17:19 501 查看
在《Lucene in action》2.5 Indexing numbers 中提到,如果希望对数据类型进行搜索,在创建索引的时候要采用KeyWord类型的Field,对应到Lucene2.0,就是:

new Field("field",number,Field.Store.YES,Field.Index.UN_TOKENIZED)

 但是在进行这一步之前,还要对数字进行处理。原因是对于像7,71,20这样的数字在转换为字符串并被创建索引之后,在进行范围搜索(range queries)的时候Lucene并不按照自然顺序(natural order)排序,而是按照词典顺序(lexicographical order)排序,即"20","7","71"。

解决的方法就是在字符串前补“0”,使自然顺序和字典顺序取得一致。并且在《Lucene in action》6.3.3提供了一个NumberUtils类,用DecimalFormat对数字进行格式化。

这个类只提供了一个将数字格式化为前面带若干个“0”的字符串形势,而没有提供将格式字符串还原为正常的数字形式的方法。因此我又添加了一个还原方法,最后该类如下:

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberUtils{

private static final DecimalFormat formatter =new DecimalFormat("00000000.00");
private static final Pattern pattern=Pattern.compile("^([0]*)([1-9][0-9]*//.[0-9]*)$");

public static String pad(float n) {
return formatter.format(n);
}

public static String revert(String n){
Matcher matcher=pattern.matcher(n);
matcher.matches();
return matcher.group(2);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: