您的位置:首页 > 其它

【Lucene】挖掘相关搜索词

2013-09-16 16:04 260 查看
搜索引擎中往往有一个可选的搜索词的列表,当搜索结果太少时,可以帮助用户扩展搜索内容,或者搜索结果太多的时候可以帮助用户深入定向搜索。一种方法是从搜索日志中挖掘字面相似的词作为相关搜索词列表。另一种方法是把用户共同查询的词作为相关搜索词,需要有搜索日志才能实现。【摘自《Lucene In Action》】

下面使用的是第一种方法:

package com.tan.code;

//省略引入

public class RelateWords {
private static final String TEXT_FIELD = "text";

/**
*
* @param words 候選相関詞列表
* @param word 相關搜索詞的種子詞
* @return
* @throws IOException
* @throws ParseException
*/
static public String[] filterRelated(HashSet<String> words, String word)
throws IOException, ParseException {

//RAMDirectory ramDirectory = new RAMDirectory();
Directory directory=new SimpleFSDirectory(new File("E://related"));
IndexWriter indexWriter = new IndexWriter(directory,
new IndexWriterConfig(Version.LUCENE_43, new IKAnalyzer(true)));
for (String text : words) {
Document document = new Document();
document.add(new TextField(TEXT_FIELD, text, Store.YES));
indexWriter.addDocument(document);
}
indexWriter.close();
IndexReader indexReader = DirectoryReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
QueryParser queryParser = new QueryParser(Version.LUCENE_43,
TEXT_FIELD, new IKAnalyzer(true));
Query query = queryParser.parse(word);
TopDocs td = indexSearcher.search(query, 10);
ScoreDoc[] sd = td.scoreDocs;
String relateWords[] = new String[sd.length];
for (int i = 0; i < sd.length; i++) {
int z = sd[i].doc;
Document doc = indexSearcher.doc(z);
relateWords[i] = doc.get(TEXT_FIELD);
}
indexReader.close();
//ramDirectory.close();
directory.close();
return relateWords;

}

}


测试代码:

@Test
public void test() throws IOException, ParseException {
// fail("Not yet implemented");
HashSet<String> words = new HashSet<String>();

// words.add("Lucene");
// words.add("Lucene入門資料");
// words.add("java資料下載");
// words.add("SQL詳解");
// words.add("揭祕Lucene原理");
// words.add("Spring原理解析");
// words.add("什麽是Lucene?怎麽樣才可以學好Lucene呢?");

String word = "Spring資料";

String rewords[] = RelateWords.filterRelated(words, word);
System.out.println("搜索内容:" + word);
System.out.println("相關搜索匹配結果:");
for (int i = 0; i < rewords.length; i++) {
System.out.println(rewords[i]);
}
}


测试结果:

搜索内容:Spring資料
相關搜索匹配結果:
java資料下載
Lucene入門資料
Spring原理解析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: