电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

Lucene 挖掘相关搜索词


发布日期:2024/2/20
 

搜索引擎中往往有一个可选的搜索词的列表当搜索结果太少时可以帮助用户扩展搜索内容或者搜索结果太多的时候可以帮助用户深入定向搜索一种方法是从搜索日志中挖掘字面相似的词作为相关搜索词列表另一种方法是把用户共同查询的词作为相关搜索词需要有搜索日志才能实现

下面使用的是第一种方法

[java]

package de;

//省略引入

public class RelateWords {

private static final String TEXT_FIELD = text;

/**

*

* @param words 候选相関词列表

* @param word 相关搜索词的种子词

* @return

* @throws IOException

* @throws ParseException

*/

static public String[] filterRelated(HashSet 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(VersionLUCENE_ new IKAnalyzer(true)));

for (String text : words) {

Document document = new Document();

documentadd(new TextField(TEXT_FIELD text StoreYES));

indexWriteraddDocument(document);

}

indexWriterclose();

IndexReader indexReader = DirectoryReaderopen(directory);

IndexSearcher indexSearcher = new IndexSearcher(indexReader);

QueryParser queryParser = new QueryParser(VersionLUCENE_

TEXT_FIELD new IKAnalyzer(true));

Query query = queryParserparse(word);

TopDocs td = indexSearchersearch(query );

ScoreDoc[] sd = tdscoreDocs;

String relateWords[] = new String[sdlength];

for (int i = ; i < sdlength; i++) {

int z = sd[i]doc;

Document doc = indexSearcherdoc(z);

relateWords[i] = docget(TEXT_FIELD);

}

indexReaderclose();

//ramDirectoryclose();

directoryclose();

return relateWords;

}

}

测试代码

[java]

@Test

public void test() throws IOException ParseException {

// fail(Not yet implemented);

HashSet words = new HashSet();

// wordsadd(Lucene);

// wordsadd(Lucene入门资料);

// wordsadd(java资料下载);

// wordsadd(SQL详解);

// wordsadd(揭祕Lucene原理);

// wordsadd(Spring原理解析);

// wordsadd(什麽是Lucene?怎麽样才可以学好Lucene呢?);

String word = Spring资料;

String rewords[] = RelateWordsfilterRelated(words word);

Systemoutprintln(搜索内容 + word);

Systemoutprintln(相关搜索匹配结果);

for (int i = ; i < rewordslength; i++) {

Systemoutprintln(rewords[i]);

}

}

测试结果

[java]

搜索内容Spring资料

相关搜索匹配结果

java资料下载

Lucene入门资料

Spring原理解析

上一篇:初始化接口中的字段

下一篇:对象的创建和存在时间