|
用户在搜索的时候,更多的情况是输入一个以上的关键字,这些关键字和可能组成一个短语。
代码:
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个无关的字。 |