熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Lucene 挖掘相關搜索詞

2022-06-13   來源: Java核心技術 

  搜索引擎中往往有一個可選的搜索詞的列表當搜索結果太少時可以幫助用戶擴展搜索內容或者搜索結果太多的時候可以幫助用戶深入定向搜索一種方法是從搜索日志中挖掘字面相似的詞作為相關搜索詞列表另一種方法是把用戶共同查詢的詞作為相關搜索詞需要有搜索日志才能實現

  下面使用的是第一種方法

  [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原理解析


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25641.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.