如何编写一个返回包含字母“t”的所有单词的Lucene查询?

时间:2010-02-01 12:37:54

标签: lucene

我尝试了这个Lucene代码示例,其工作原理:
http://snippets.dzone.com/posts/show/8965

然而改变:
 查询query = parser.parse(“st。”);

 查询query = parser.parse(“t”);

返回零点击。

如何编写返回包含字母“t”的所有单词的Lucene查询?
(返回的最大命中数= 20)

编辑:这是有用的:

RegexQuery regexquery =新的RegexQuery(新术语(“fieldname”,“。 t。”));

isearcher.search(regexquery,collector);
System.out.println(“collector.getTotalHits()=”+ collector.getTotalHits());

2 个答案:

答案 0 :(得分:6)

您需要一个不同的Analyzer。该示例使用StandardAnalyzer,它根据空格和其他一些更精细的规则删除标点符号并中断单词。但是,它不会将单词分解为字符。您可能需要构建自己的自定义分析器来执行此操作,并且它似乎在运行时和内存消耗方面都很昂贵。另一个(可能更好)选项是使用RegexQuery

答案 1 :(得分:1)

我有好消息和坏消息。好消息是,您可以使用wildcards来匹配任何文字:

parser.parse("st*"); // Will math "st.", "station", "steal", etc...

不幸的是,文档指出:

  

注意:您不能使用*或?符号   作为搜索的第一个字符。

意思是,你不能使用这种语法:

parser.parse("*t*");

因此,您不能要求Lucene在任意位置返回包含字母't'的条款。您可以要求Lucene以特定字母返回开始的条款。

你现在唯一的选择似乎是遍历所有条款,做你自己的匹配。