zoukankan      html  css  js  c++  java
  • 【Lucene】挖掘相关搜索词

    搜索引擎中往往有一个可选的搜索词的列表,当搜索结果太少时,可以帮助用户扩展搜索内容,或者搜索结果太多的时候可以帮助用户深入定向搜索。一种方法是从搜索日志中挖掘字面相似的词作为相关搜索词列表。另一种方法是把用户共同查询的词作为相关搜索词,需要有搜索日志才能实现。【摘自《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原理解析
    




  • 相关阅读:
    第一次作业 —— 【作业7】问卷调查
    讲座观后感
    学习进度表(随缘更新)
    数据结构与算法思维导图
    作业七问卷调查
    《创新者的逆袭,用第一性原理做颠覆式创新》读后感
    结对项目--四则运算生成器(Java) 刘彦享+龙俊健
    个人项目---WordCount实现(Java)
    自我介绍+软工五问
    简洁又快速地处理集合——Java8 Stream(下)
  • 原文地址:https://www.cnblogs.com/james1207/p/3324951.html
Copyright © 2011-2022 走看看