我正在做一个网站的垂直搜索模块,现在碰到了以下问题。
请注意:根据字符串查询相关内容的方法我已经写好了,所以我不是问查找相关文章的算法。
我要问的是:
我的查找相关文章的方法 要求我传一个代表文章内容的字符串作为对比参数。
难道我在显示每篇文章之前都要先把 该文章的所有内容传给 查找相关文章的方法,然后获得相关文章列表吗?
如果文章的内容很多,这种传输会不会造成性能问题呢?
javaeye生成相关文章列表的凭据数据是什么呢?也是拿整篇文章的内容去求得相关文章列表?还是有其他更改好的方法?
如果 javaeye也是把文章的所有内容作为查找相关文章的凭据,那么这些内容是如何传到后台的呢,通过url参数吗?
小弟不才,还请各位大大帮助。
附上查询方法:
package com.jdtqn.module.tools.search;import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;import jeasy.analysis.MMAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.similar.MoreLikeThis;import com.jdtqn.module.tools.SearchResult;
import com.jdtqn.module.tools.SearchResults;public class MoreLikeThisSearcher implements Seacher{
private String index_path="D:\\work\\resin-pro-3.0.26\\deploy\\jdtqn_final\\anthemIndex"; public void setIndex_path(String index_path){ this.index_path=index_path; } public SearchResults search(String queryWord) throws Exception { IndexReader r = IndexReader.open(index_path); MoreLikeThis mlt = new MoreLikeThis(r); //传入IndexReader对象提供查询 mlt.setAnalyzer(new MMAnalyzer());//设置使用的分词器 mlt.setFieldNames(new String[]{"htmlTitle","htmlContent"}); //设置需要比较的field字段 mlt.setMinWordLen(0); mlt.setMinDocFreq(2);//出现词的频率小于二,则该词不作为关键词被纳入搜索 mlt.setMinTermFreq(3); mlt.setBoost(true); Query query = null; query = mlt.like(new StringReader(queryWord)); //创建查询,传入查询内容可为任意的Reader子类 IndexSearcher searcher = new IndexSearcher(index_path); Hits hits = searcher.search(query); //根据查询返回相似文档 int len = hits.length(); System.out.println(len); SearchResult searchResult; SearchResults searchResults = new SearchResults(); searchResults.setHitsCount(len); List<searchresult> searchList = new ArrayList<searchresult>(); for (int i = 0; i < Math.min(7, len); i++) //如果比7大就只返回前7条 { searchResult = new SearchResult(); System.out.println(hits.score(i)); searchResult.setHtmlName(hits.doc(i).get("htmlName")); System.out.println(hits.doc(i).get("htmlName")); searchResult.setHtmlTitle(hits.doc(i).get("htmlTitle")); searchList.add(searchResult); System.out.println("*****************"); } r.close(); //关闭索引 return searchResults; }
}
问题补充
难道就没人知道吗?没人做相似文章推荐这个功能吗?
自己顶下