Lucene 搜索方法(短语搜索)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-28 12:09   17   0

用户在搜索的时候,更多的情况是输入一个以上的关键字,这些关键字和可能组成一个短语。

代码:

public static void main(String[] args) {
try {
IndexSearcher search = new IndexSearcher("d://demo");
PhraseQuery query = new PhraseQuery();
Term term1 = new Term("bookname","钢");
Term term2 = new Term("bookname","铁");
query.add(term1);
query.add(term2);
query.setSlop(2);
Hits hits = search.search(query);
for(int i=0;i<hits.length();i++)
{
System.out.println(hits.doc(i));
}
} catch (Exception e) {
e.printStackTrace();
}

}

打印:

Document<stored/uncompressed,indexed,tokenized<bookname:钢铁战士>>
Document<stored/uncompressed,indexed,tokenized<bookname:钢铁是怎样炼成的>>
Document<stored/uncompressed,indexed,tokenized<bookname:钢和铁是两种金属元素>>
Document<stored/uncompressed,indexed,tokenized<bookname:钢要比铁有更多的碳元素>>

搜索结果都是钢和铁两字相连,而且顺序也一致的文档,即严格包含有“钢铁”这个短语的文档。

但是有时候用户会经常的输漏一个字或是多输入一个字,比如“钢或铁”等。

该类提供了一个setSlop(int num)的方式,表示设置坡度,它用于表示词组的两个字间可以插入无关字数的个数。

这个坡度默认值为0,在默认情况下,它将只给出那些严格匹配短语的文档作为查询结果。比如例子中设置的是2,那么表示在钢铁这两个字之间可以插入2个无关的字。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP