我尝试了这个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());
答案 0 :(得分:6)
您需要一个不同的Analyzer。该示例使用StandardAnalyzer,它根据空格和其他一些更精细的规则删除标点符号并中断单词。但是,它不会将单词分解为字符。您可能需要构建自己的自定义分析器来执行此操作,并且它似乎在运行时和内存消耗方面都很昂贵。另一个(可能更好)选项是使用RegexQuery。
答案 1 :(得分:1)
我有好消息和坏消息。好消息是,您可以使用wildcards来匹配任何文字:
parser.parse("st*"); // Will math "st.", "station", "steal", etc...
不幸的是,文档指出:
注意:您不能使用*或?符号 作为搜索的第一个字符。
意思是,你不能使用这种语法:
parser.parse("*t*");
因此,您不能要求Lucene在任意位置返回包含字母't'的条款。您可以要求Lucene以特定字母返回开始的条款。
你现在唯一的选择似乎是遍历所有条款,做你自己的匹配。