一个辅助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);
}
}
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);
}
}
相关文章推荐
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作 2014-06-11 10:47 3130人阅读 评论(1) 收藏
- Lucene五(添加日期和数字类型索引)
- Lucene 6.10 初级 创建索引库和利用索引库进行搜索!
- 用Lucene对文档进行索引搜索
- Lucene在多个索引上进行搜索
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
- 基于Lucene多索引进行索引和搜索
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
- 输入一个1~9之间的数字 ,对 1到该数之间所有的数进行全排序(深度优先搜索的基本模型)
- 编程点滴.LUCENE.对数字、日期、时间等进行索引
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
- lucene使用IKAnalyzer3.2.5中文分词器进行索引的一个小例子
- lucene.net学习五——一个索引查看工具NLuke
- Lucene在同一索引多个域上进行搜索
- lucene使用IKAnalyzer3.2.8中文分词器进行索引的一个小例子
- 使用Lucene对建立的索引进行搜索
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
- 使用Java的Lucene搜索工具对检索结果进行分组和分页
- 如何在Lucene里面进行数字范围搜索 (Numeric Range Query)