当前位置: 首页 > news >正文

视频播放网站 模板青海wap网站建设比较好

视频播放网站 模板,青海wap网站建设比较好,wordpress主题 插件下载,中国设计师个人网站2019独角兽企业重金招聘Python工程师标准 1. 概述 Lucene是一个全文检索引擎的架构#xff0c;提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能 1.    概述 Lucene是一个全文检索引擎的架构提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能本总结使用lucene--2.3.2。 2.    lucene 的包结构 1、org.apache.lucene.analysis对需要建立索引的文本进行分词、过滤等操作, 语言分析器主要用于的切词Analyzer是一个抽象类管理对文本内容的切分词规则。 2、org.apache.lucene.analysis.standard是标准分析器 3、org.apache.lucene.document提供对Document和Field的各种操作的支持。索引存储时的文档结构管理类似于关系型数据库的表结构。Document相对于关系型数据库的记录对象Field主要负责字段的管理。 4、org.apache.lucene.index是最重要的包用于向Lucene提供建立索引时各种操作的支持。索引管理包括索引建立、删除等。索引包是整个系统核心全文检索的根本就是为每个切出来的词建索引查询时就只需要遍历索引而不需要去正文中遍历从而极大的提高检索效率。 5、org.apache.lucene.queryParser提供检索时的分析支持。查询分析器实现查询关键词间的运算如与、或、非等。 6、org.apache.lucene.search 负责检索。检索管理根据查询条件检索得到结果。 7、org.apache.lucene.store提供对索引存储的支持。数据存储管理主要包括一些底层的I/0操作。 8、org.apache.lucene.util提供一些常用工具类和常量类的支持 3.    索引文件格式 a)         .fnm格式  包含了Document中所有field名称 b)        .fdt与.fdx格式  .fdt文件用于存储具有Store.YES属性的Field的数据.fdx是一个索引用于存储Document在.fdt中的位置。 c)         .tis 与.tii格式  .tis文件用于存储分词后的词条Term而.tii就是它的索引文件它表明了每个.tis文件中的词条的位置。 d)        deletable格式 文档被删除后会首先在deletable文件中留下一个记录要真正删除时才将索引除去。 e)         复合索引格式 .cfs 使用IndexWriter的useCompoundFile()  默认为True 4.    lucene中主要的类 4.1. Document文档类 4.1.1.常用方法 方法 描述 void add(Field field) 往Document对象中添加字段 void removeField(String name) 删除字段。若多个字段以同一个字段名存在则删除首先添加的字段若不存在则Document保持不变 void removeFields(String name) 删除所有字段。若字段不存在则Document保持不变 Field getFieldString name 若多个字段以同一个字段名存在则返回首先添加的字段若字段不存在则Document保持不变 Enumeration fields() 返回Document对象的所有字段以枚举类型返回 Field [] getFields(String name) 根据名称得到一个Field的数组 String [] getValues(String name) 根据名称得到一个Field的值的数组   4.1.2.示例 Document doc1 new Document(); doc1.add(new Field(name, word1 word2 word3, Field.Store.NO,Field.Index.TOKENIZED)); Document doc2 new Document(); doc2.add(new Field(name, word1 word2 word3, Field.Store.NO,Field.Index.TOKENIZED)); 4.2. Field字段类 4.2.1.构造方法 1)        public Field(String name,String value,Store store,Index index);//直接的字符串方式 2)        public Field(String name,String value,Store store,Index index,TermVector termVector); 3)        public Field(String name,String value,Reader reader);//使用Reader从外部传入 4)        public Field(String name,String value,Reader reader,TermVector termVector); 5)        public Field(String name,byte[] value,Store store)//使用直接的二进制byte传入 当Field值为二进制时可以使用Lucene的压缩功能将其值进行压缩。 4.2.2.Store类 静态属性 描述 Store.NO 表示该Field不需要存储 Store.YES 表示该Field需要存储 Store.COMPRESS 表示用压缩方式来保存这个Field的值 4.2.3.Index类 静态属性 描述 Index.NO 不需要索引 Index.TOKENIZED 先被分词再被索引 Index.UN_TOKENIZED 不对该Field进行分词但会对它进行索引 Index.NO_NORMS 对该Field进行索引但是不使用Analyzer同时禁止它参加评分主要是为了减少内存的消耗。   4.2.4.示例 new Field(name, word1 word2 word3,Field.Store.YES,Field.Index.TOKENIZED)   4.3. IndexWriter类 4.3.1.构造方法 1)        public IndexWriter(String path,Analyzer a,Boolean create) 2)        public IndexWriter(File path,Analyzer a,Boolean create) 3)        public IndexWriter(Directory d,Analyzer a,Boolean create) 第一个参数索引存放在什么地方 第二个参数分析器继承自org.apache.lucene.analysis.Analyzer类 第三个参数为true时IndexWriter不管目录内是否已经有索引了一律清空重新建立当为false时则IndexWriter会在原有基础上增量添加索引。所以在更新的过程中需要设置该值为false。 4.3.2.添加文档 public void addDocument(Document doc) public void addDocument(Document doc,Analyzer analyzer)//使用一个开发者自定义的而非事先在构建IndexWriter时声明的Analyzer来进行分析 writer.addDocument(doc1); 4.3.3.性能参数 1)        mergeFactor控制Lucene在把索引从内存写入磁盘上的文件系统时内存中最大的Document数量同时它还控制内存中最大的Segment数量。默认为10. writer.setMergeFactor(10); 2)        maxMergeDocs限制一个Segment中最大的文档数量。一个较大的maxMergeDocs适用于对大批量的文档建立索引增量式的索引则应使用较小的maxMergeDocs。 writer.setMaxMergeDocs(1000); 3)        minMergeDocs用于控制内存中持有的文档数量的它对磁盘上的Segment大小没有任何影响。 4.3.4.限制Field的长度 maxFieldLength限制Field的长度默认值为10000.最大值100000个。 public void setMaxFieldLength(int maxFieldLength) writer.addDocument(doc1); writer.setMaxFieldLength(100000); writer.addDocument(doc2); 4.3.5.复合索引格式 setUseCompoundFile(Boolean) 默认true writer.setUseCompoundFile(true);//复合索引 writer.setUseCompoundFile(false); 4.3.6.优化索引 writer.optimize(); 将磁盘上的多个segment进行合并组成一个全新的segment。这种方法并不会增加建索时的速度反而会降低建索的速度。所以应该在建完索引后在调用这个函数 4.3.7.示例 IndexWriter writer new IndexWriter(path, new StandardAnalyzer(), true); writer.addDocument(doc1); writer.addDocument(doc2); Sytem.out.println(writer.docCount()); writer.close(); IndexSearcher searcher new IndexSearcher(path); Hits hits null; Query query null; QueryParser parser new QueryParser(name, new StandardAnalyzer()); query parser.parse(word1); hits searcher.search(query); System.out.println(查找 word1 共 hits.length() 个结果);   4.4. Directory类 Directory用于索引的存放位置 a)         FSDirectory.getDirectory(path, true)第二个参数表示删除掉目录内原有内容 IndexWriter writer new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);//删除原有索引 或 FSDirectory fsDirFSDirectory.getDirectory(path,true); IndexWriter writer new IndexWriter(fsDir, new StandardAnalyzer(), true); b)        RAMDirectory在内存中存放读取速度快但程序一运行结束它的内容就不存在了 RAMDirectory ramDirnew RAMDirectory(); IndexWriter writer new IndexWriter(ramDir, new StandardAnalyzer(), true);   或 IndexWriter writer new IndexWriter(new RAMDirectory(), new StandardAnalyzer(), true); 4.5. IndexReader类 IndexReader类――索引的读取工具 4.5.1.删除文档 IndexReader readerIndexReader.open(path); reader.deleteDocument(0);//删除第一个 reader.close(); 4.5.2.反删除 reader.undeleteAll(); 4.5.3.按字段删除 reader.deleteDocuments(new Term(name,word1)); 若要真正物理删除则只需使用IndexWriter对索引optimize一次即可 4.5.4.示例 IndexReader readerIndexReader.open(path);            for(int i0;ireader.numDocs();i){               System.out.println(reader.document(i));            }            System.out.println(版本reader.getVersion());            System.out.println(索引内的文档数量reader.numDocs());            //reader.deleteDocuments(new Term(name,word1));            Term term1new Term(name,word1);            TermDocs docsreader.termDocs(term1);            while(docs.next())            {               System.out.println(含有所查找的term1的Document的编号为docs.doc());               System.out.println(Term在文档中的出现次数docs.freq());            }            reader.close();   4.6. IndexModifier类 集成了IndexWriter的大部分功能和IndexReader中对索引删除的功能 ------ Lucene2.0的新类   4.6.1.示例 public static void main(String[] args) throws Exception {        IndexModifier modifiernew IndexModifier(C:\\Q1,new StandardAnalyzer(),true);        Document doc1new Document();        doc1.add(new Field(bookname,钢铁是怎样炼成的,Field.Store.YES,Field.Index.TOKENIZED));        Document doc2new Document();        doc2.add(new Field(bookname,山山水水,Field.Store.YES,Field.Index.TOKENIZED));        modifier.addDocument(doc1);        modifier.addDocument(doc2);               System.out.println(modifier.docCount());        modifier.setUseCompoundFile(false);        modifier.close();               IndexModifier monew IndexModifier(C:\\Q1,new StandardAnalyzer(),false);        mo.deleteDocument(0);        System.out.println(mo.docCount());        mo.close();     }   4.7. IndexSearcher类 4.7.1.构造方法 IndexSearcher searcher new IndexSearcher(String path); IndexSearcher searcher new IndexSearcher(Directory directory); IndexSearcher searcher new IndexSearcher(IndexReader r); IndexSearcher searcher new IndexSearcher(IndexReader r,Boolean closeReader); IndexSearcher searcher new IndexSearcher(path); IndexSearcher searcher new IndexSearcher(FSDirectory.getDirectory(path,false) ); 4.7.2.search方法 //返回Hits对象 public Hits search(Query query) public Hits search(Query query,Filter filter) public Hits search(Query query,Sort sort) public Hits search(Query query,Filter filter,Sort sort)   //检索只返回得分最高的Document public TopDocs search(Query query,Filter filter,int n) public TopDocs search(Weight weight,Filter filter,int n) public TopFieldDocs search(Weight weight,Filter filter,int n,Sort sort) public TopFieldDocs search(Query query,Filter filter,int n,Sort sort)   //传入HitCollector,将结果保存在HitCollector中 public void search(Query query,HitCollector results) public void search(Query query,Filter filter,HitCollector results) public void search(Weight weight,Filter filter,HitCollector results) 4.7.3.Searcher的explain方法 public Explaination explain(Query query,int doc)throws IOException for(int i0;ihits.length()i10;i) {     Document dhits.doc(i);     System.out.println(i hits.score(i) d.get(contents)); System.out.println(searcher.explain(query,hits.id(i)).toString()); } 4.7.4.示例 IndexSearcher searcher new IndexSearcher(path); Hits hits null; Query query null;   QueryParser parser new QueryParser(contents, new StandardAnalyzer());   query parser.parse(11); hits searcher.search(query); System.out.println(查找 word1 共 hits.length() 个结果);   for(int i0;ihits.length()i10;i) {     Document dhits.doc(i);     System.out.println(d i hits.score(i) d.get(contents)); } searcher.close(); 4.8. Hits类 4.8.1.概述 Hits类――检索结果 4.8.2.常用方法     方法名 描述 int length() 返回搜索到结果的总数量 Document doc(int i) 返回第i个文档 int id(int i) 返回第i个文档的内部ID号 float score(int i) 返回第i个文档的得分 Iterator iterator() 取得Hits集合的遍历对象 4.8.3.示例 for(int i0;ihits.length()i10;i) {     Document dhits.doc(i);     System.out.println(d hits.score(i) d.get(contents)); System.out.println(文档的内部ID号: hits.id(i)); } 4.9. QueryParser类 4.9.1.改变默认的布尔逻辑 Ø  默认为“或”关系 Query query null; QueryParser parser new QueryParser(contents, new StandardAnalyzer()); query parser.parse(hello world!); System.out.println(query.toString()); Ø  改变默认布尔逻辑 Query query null; QueryParser parser new QueryParser(contents, new StandardAnalyzer()); parser.setDefaultOperator(QueryParser.AND_OPERATOR); query parser.parse(hello world);//若world后加会出错 System.out.println(query.toString()); Ø  AND OR NOT – 关键字 也可以不用改变默认布尔逻辑而直接让用户在输入关键字时指定不同词条间的布尔联系。例如用户输入 hello AND world  必须为大写 逻辑与AND 大写 逻辑或OR  大写 逻辑非-   例如 hello - world 也可以是NOT  例如 hello NOT world 4.9.2.不需要分词 不进行分词将其完整的作为一个词条进行处理则需要在词组的外面加上引号 String queryStr\God helps those who help themselves\; QueryParser parser new QueryParser(bookname,new StandardAnalyzer()); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query queryparser.parse(queryStr); System.out.println(query.toString()); 4.9.3.设置坡度值,支持FuzzyQuery String queryStr\God helps those who help themselves\~1;//设置坡度为1 QueryParser parser new QueryParser(bookname,new StandardAnalyzer()); Query queryparser.parse(queryStr); System.out.println(query.toString()); 4.9.4.设置通配符支持WildcardQuery String queryStrwor? QueryParser parser new QueryParser(bookname,new StandardAnalyzer()); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query queryparser.parse(queryStr); System.out.println(query.toString()); 4.9.5.查找指定的Field String queryStrlinux publishdate:2006-09-01; QueryParser parser new QueryParser(bookname,new StandardAnalyzer()); parser.setDefaultOperator(QueryParser.AND_OPERATOR); Query queryparser.parse(queryStr); System.out.println(query.toString()); 例如要求用户选择某一方面的 QueryParser parsernew QueryParser(publishdate, new StandardAnalyzer()); Query queryparser.parse(queryStr); System.out.println(query.toString());   输出结果为publishdate:[081xmghs0 TO 0boeetj3z] 因为建立索引时如果按照日期表示的字符串来进行索引实际上比较的是字符串的字典顺序。而首先将日期转为以毫秒计算的时间后则可以精确地比较两个日期的大小了。于是lucene提供DateTools工具用来完成其内部对时间的转化和处理将毫秒级的时间转化为一个长字符串来进行表示并进行索引。所以遇到日期型数据时最好用DateTools进行转换再进行索引 4.9.7.现在还不支持SpanQuery 4.10.        MultiFieldQueryParser类--多域搜索 //在不同的Field上进行不同的查找 public static Query parse(String []queries,String[] fields,Analyzer analyzer)throws ParseException   //在不同的Field上进行同一个查找指定它们之间的布尔关系 public static Query parse(String query,String[] fields,BooleanClause.Occur[] flags,Analyzer analyzer) throws ParseException   //在不同的Field上进行不同的查找指定它们之间的布尔关系 public static Query parse(String []queries,String [] fields,BooleanClause.Occur[] flags,Analyzer analyzer)throws ParseException String [] queries{钢, [10 TO 20]}; String[] fields{“bookname”,”price”}; BooleanClause.Occur[] clauses{BooleanClause.Occur.MUST,BooleanClause.Occur.MUST}; Query queryMultiFieldQueryParser.parse(queries,fields,clauses,new StandardAnalyzer()); System.out.println(query.toString());   4.11.        MultiSearcher类--多个索引搜索 IndexSearcher searcher1new IndexSearcher(path1); IndexSearcher searcher2new IndexSearcher(path2); IndexSeacher [] searchers{searcher1,seacher2}; MultiSearcher searchernew MultiSearcher(searchers); Hits hitssearcher.search(query); for(int i0;ihits.length();i){     System.out.println(hits.doc(i)); } 4.12.        ParalellMultiSearcher类---多线程搜索 IndexSearcher searcher1new IndexSearcher(path1); IndexSearcher searcher2new IndexSearcher(path2); IndexSearcher [] searchers{searcher1,searcher2}; ParallelMultiSearcher searchernew ParallelMultiSearcher(searchers); long startSystem.currentTimeMillis(); Hits hitssearcher.search(query); long endSystem.currentTimeMillis(); System.out.println((end-start)ms); 5.    排序 5.1. Sort类 public Sort() public Sort(String field) public Sort(String field,Boolean reverse)  //默认为false降序排序 public Sort(String[] fields) public Sort(SortField field) public Sort(SortField[] fields) Sort sortnew Sort(“bookname”);按照“bookname“这个Field值进行降序排序 Sort sortnew Sort(“bookname”,true) //升序排序 Sort sortnew Sort(new String[]{“bookNumber”,”bookname”,”publishdate”});按照三个Field进行排序但无法指定升序排序所以用SortField 5.2. SortField类 public SortField(String field) public SortField(String field,Boolean reverse) public SortField(String field,int type) //type表示当前Field值的类型 public SortField(String field,int type,boolean reverse)  //默认为false升序 Field值的类型SortField.STRING、SortField.INT、SortField.FLOAT SortField sf1new SortField(“bookNumber”,SortField.INT,false); SortField sf2new SortField(“bookname”,SortField.STRING,false); 5.3. 指定排序的法则 5.3.1.按照文档的得分降序排序 Hits hitssearcher.search(query,Sort.RELEVANCE); 5.3.2.按文档的内部ID升序排序 Hits hitssearcher.search(query, Sort.INDEXORDER); 5.3.3.按照一个Field来排序 Sort sortnew Sort(); SortField sfnew SortField(“bookNumber”,SortField.INT,false); sort.setSort(sf); Hits hitssearcher.search(query,sort); 5.3.4.按照多个Field来排序 Sort sortnew Sort(); SortField sf1new SortField(“bookNumber”,SortField.INT,false);//升序 SortField sf2new SortField(“publishdate”,SortField.STRING,true);//降序 sort.setSort(new SortField[]{sf1,sf2}); Hits hitssearcher.search(query,sort); 5.3.5.改变SortField中的Locale信息 String str1”我”; String str2”你”; Collator co1Collator.getInstance(Locale.CHINA); Collator co2Collator.getInstance(Locale.JAPAN); System.out.println(Locale.CHINA”:”co1.compare(str1str2)); System.out.println(Locale.JAPAN”:”co2.compare(str1,str2)); 输出结果为 zh_CN:1 ja_JP:-1 所以 public SortField(String field,Locale locale) public SortField(String field,Locale locale,boolean reverse) 6.    过滤器 使用public Hits search(Query query,Filter filter) 1简单过滤 Hits hitssearcher.search(query,new AdvancedSecurityFilter());//过滤掉securitylevel为0的结果 2范围过滤—RangeFilter 只显示中间的 RangeFilter filternew RangeFilter(“publishdate”,”1970-01-01”,”1998-12-31”,true,true”); Hits hitssearcher.search(query,filter);   无上边界 public static RangeFilter More(String fieldname,String lowerTerm)   无下边界 public static RangeFilter Less(String fieldname,String upperTerm) (3)在结果中查询QueryFilter RangeQuery qnew RangeQuery(new Term(“publicshdate”,”1970-01-01”), new Term(“publishdate”,”1999-01-01”),true); QueryFilter filternew QueryFilter(q); Hits hitssearcher.search(query,filter); 7.    分析器Analysis 7.1. 自带分析器和过滤器 Ø  标准过滤器StandardAnalyzer Ø  大小写转换器LowerCaseFilter Ø  忽略词过滤器StopFilter public StopFilter(TokenStream input,String [] stopWords) public StopFilter(TokenStream in,String [] stopWords,boolean ignoreCase) public StopFilter(TokenStream input,Set stopWords,boolean ignoreCase) public StopFilter(TokenStream in, Set stopWords) 其中参数TokenStream代表当前正在进行处理的流String类型的数组代表一个用数组表示的忽略词集合Set类型的参数与String一样是用来表示忽略词集合的boolean表示当与忽略词集合中的词进行匹配时是否需要忽略大小写。 Ø  长度过滤器LengthFilter Ø  PerFieldAnalyzerWrapper Ø  WhitespaceAnalyzer String strstr1 str2 str3;        StringReader readernew StringReader(str);        Analyzer anlyzernew WhitespaceAnalyzer();               TokenStream tsanlyzer.tokenStream(, reader);        Token tnull;        while( (tts.next())!null ){            System.out.println(t.termText());        } 7.2. 第三方过分析器 Ø  单字分词 Ø  二分法CJKAnalyzer、中科院ICTCLAS分词、JE分词 Ø  词典分词 7.2.1.JE分词用法 7.2.1.1.   示例 import jeasy.analysis.MMAnalyzer; IndexWriter writer new IndexWriter(INDEX_STORE_PATH, new MMAnalyzer() , true); String str Lucene是一个全文检索引擎的架构            提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快            速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用            中实现针对应用的全文索引、检索功能本总结使用lucene--2.3.2。;        MMAnalyzer analyzernew MMAnalyzer();        try{            System.out.println(analyzer.segment(str, |));        }        catch(Exception e)        {            e.printStackTrace();        } 输出结果lucene|一个|全文|检索|引擎|架构|提供|完整|查询|。。。。 7.2.1.2.   设定正向最大匹配的字数 MMAnalyzer analyzernew MMAnalyzer(4); 7.2.1.3.   添加新词 MMAnalyzer.addWord(String word); MMAnalyzer.addDictionary(Reader reader);   MMAnalyzer analyzernew MMAnalyzer(); MMAnalyzer.addWord(迈克尔雷第);   8.    索引的合并 RAMDirectory RAMDirnew RAMDirectory(); IndexWriter writer new IndexWriter(RAMDir, new StandardAnalyzer(), true);//删除原有索引 IndexWriter writer2new IndexWriter(FSDirectory.getDirectory(path,true), new StandardAnalyzer(), true); writer.addDocument(doc1); writer2.addDocument(doc2); writer.close(); writer2.addIndexes(new Directory[]{RAMDir}); writer2.close(); 注意在合并前一定要先关闭要加的索引器。 9.    各种Query 9.1. 概述 query.toString()查看原子查询 9.2. 使用特定的分析器搜索 IndexSearcher searcher new IndexSearcher(path ); Hits hits null; Query query null; QueryParser parser new QueryParser(contents, new StandardAnalyzer()); query parser.parse(11 aand hello); hitssearcher.search(query); //查找 name:11 name:hello 共1个结果 System.out.println(查找 query.toString() 共 hits.length() 个结果); 9.3. 按词条搜索—TermQuery Query query null; querynew TermQuery(new Term(name,word1 aand)); hitssearcher.search(query);// 查找 name:word1 aand 共0个结果 System.out.println(查找 query.toString() 共 hits.length() 个结果); 9.4. 按“与或”搜索—BooleanQuery 1.和 MUST与MUST_NOT 2.或 SHOULD与SHOULD 3.A与B的并集B  MUST与MUST_NOT Query query1null; Query query2null; BooleanQuery querynull; query1new TermQuery(new Term(name,word1)); query2new TermQuery(new Term(name,word2)); querynew BooleanQuery(); query.add(query1,BooleanClause.Occur.MUST); query.add(query2,BooleanClause.Occur.MUST_NOT); 9.5. 在某一范围内搜索—RangeQuery Term beginTimenew Term(time,200001); Term endTimenew Term(time,200005); RangeQuery querynull; querynew RangeQuery(beginTime,endTime,false);//不包含边界值 9.6. 使用前缀搜索—PrefixQuery Term pre1new Term(name,wor); PrefixQuery querynull; query new PrefixQuery(pre1); 9.7. 短语搜索—PhraseQuery a)默认坡度为0 PhraseQuery query new PhraseQuery(); query.add(new Term(“bookname”,”钢”)); query.add(new Term(“bookname”,”铁”)); Hits hitssearcher.search(query); //搜索“钢铁”短语而非“钢”和“铁” b)设置坡度默认为0 PhraseQuery query new PhraseQuery(); query.add(new Term(“bookname”,”钢”)); query.add(new Term(“bookname”,”铁”)); query.setSlop(1); Hits hitssearcher.search(query);//搜索“钢铁”或“钢*铁”中含一字 9.8. 多短语搜索—MultiPhraseQuery a) MultiPhraseQuery querynew MultiPhraseQuery(); //首先向其中加入要查找的短语的前缀 query.add(new Term(“bookname”,”钢”)); //构建3个Term作为短语的后缀 Term t1new Term(“bookname”,”铁”); Term t2new Term(“bookname”,”和”); Term t3new Term(“bookname”,”要”); //再向query中加入所有的后缀与前缀一起它们将组成3个短语 query.add(new Term[]{t1,t2,t3}); Hits hitssearcher.search(query); for(int i0;ihits.length();i)     System.out.println(hits.doc(i)); b) MultiPhraseQuery querynew MultiPhraseQuery(); Term t1new Term(“bookname”,”钢”); Term t2 new Term(“bookname”,”和”); query.add(new Term[]{t1,t2}); query.add(new Term(“bookname”,”铁”)); c) MultiPhraseQuery querynew MultiPhraseQuery(); Term t1new Term(“bookname”,”钢”); Term t2 new Term(“bookname”,”和”); query.add(new Term[]{t1,t2}); query.add(new Term(“bookname”,”铁”)); Term t3new Term(“bookname”,”是”); Term t4new Term(“bookname”,”战”); query.add(new Term[]{t3,t4}); 9.9. 模糊搜索—FuzzyQuery 使用的算法为levenshtein算法在比较两个字符串时将动作分为3种 l  加一个字母 l  删一个字母 l  改变一个字母 FuzzyQuery querynew FuzzyQuery(new Term(“content”,”work”));   public FuzzyQuery(Term term) public FuzzyQuery(Term term,float minimumSimilarity)throws IllegalArgumentException public FuzzyQuery(Term term,float minimumSimilarity,int prefixLength)throws IllegalArgumentException 其中minimumSimilarity为最小相似度越小则文档的数量越多。默认为0.5.其值必须1.0 FuzzyQuery querynew FuzzyQuery(new Term(“content”,”work”),0.1f); 其中prefixLength表示要有多少个前缀字母必须完全匹配 FuzzyQuery querynew FuzzyQuery(new Term(“content”,”work”),0.1f,1); 9.10.        通配符搜索—WildcardQuery * 表示0到多个字符 ? 表示一个单一的字符 WildcardQuery querynew WildcardQuery(new Term(“content”,”?qq*”)); 9.11.        跨度搜索 9.11.1.      SpanTermQuery 效果和TermQuery相同 SpanTermQuery querynew SpanTermQuery(new Term(“content”,”abc”)); 9.11.2.      SpanFirstQuery 从Field内容的起始位置开始在一个固定的宽度内查找所指定的词条 SpanFirstQuery querynew SpanFirstQuery(new Term(“content”,”abc”),3);//是第3个word不是byte 9.11.3.      SpanNearQuery SpanNearQuery相当与PhaseQuery SpanTermQuery peoplenew SpanTermQuery(new Term(“content”,”mary”)); SpanTermQuery hownew SpanTermQuery(new Term(“content”,”poor”)); SpanNearQuery querynew SpanNearQuery(new SpanQuery[]{people,how},3,false); 9.11.4.      SpanOrQuery 把所有SpanQuery的结果合起来 SpanTermQuery s1new SpanTermQuery(new Term(“content”,”aa”); SpanTermQuery s2new SpanTermQuery(new Term(“content”,”cc”); SpanTermQuery s3new SpanTermQuery(new Term(“content”,”gg”); SpanTermQuery s4new SpanTermQuery(new Term(“content”,”kk”); SpanNearQuery query1new SpanNearQuery(new SpanQuery[]{s1,s2},1,false); SpanNearQuery query2new SpanNearQuery(new SpanQuery[]{s3,s4},3,false); SpanOrQuery querynew SpanOrQuery(new SpanQuery[]{query1,query2}); 9.11.5.      SpanNotQuery 从第1个SpanQuery的查询结果中去掉第2个SpanQuery的查询结果 SpanTermQuery s1new SpanTermQuery(new Term(“content”,”aa”); SpanFirstQuery query1new SpanFirstQuery(s1,3);   SpanTermQuery s3new SpanTermQuery(new Term(“content”,”gg”); SpanTermQuery s4new SpanTermQuery(new Term(“content”,”kk”); SpanNearQuery query2new SpanNearQuery(new SpanQuery[]{s3,s4},4,false);   SpanNotQuery querynew SpanNotQuery(query1,query2); 9.12.        RegexQuery—正则表达式的查询 String regexhttp://[a-z]{1,3}\\.abc\\.com/.*;        RegexQuery querynew RegexQuery(new Term(url,regex));   10.   评分机制 10.1.        概述 通过searcher.explain(Query query, int doc)方法可以查看某个文档的得分的具体构成。 在Lucene中score简单说是由 tf * idf * boost * lengthNorm计算得出的。 1)        tfTerm Frequency.词条频率是查询的词在文档中出现的次数的平方根 2)        idf表示反转文档频率Math.log(numDocs/(double)(docFreq1))1.0   docDocs表示当前检索的词条的文档总数 numDocs表示索引中总共的文档数量 3)        boost激励因子可以通过setBoost方法设置需要说明的通过field和doc都可以设置所设置的值会同时起作用 。默认为1.boost的值是在索引建立的时候已经写入了而不像其他计算得分的因子是在查询时实时得出的。因此一旦boost值被写入就不能修改它除非重新建立文档索引。 4)        lengthNorm是由搜索的field的长度决定了越长文档的分值越低。 11.   Lucene的索引“锁” 1.    write.lock 2.    commit.lock   转载于:https://my.oschina.net/lujian863/blog/152018
http://wiki.neutronadmin.com/news/157704/

相关文章:

  • 盐城网站建设服务北京西站地铁是几号线
  • 接技术标做网站怎样到提供电子邮件的网站注册
  • 鞋业有限公司网站设计法国企业网站建设
  • 做推广适合哪些网站广东石油化工建设集团公司网站
  • 淄博做网站58同城甘肃网站开发
  • 泉州地区网站建设公司docker pull wordpress
  • 专业网站制作设深圳做网站排名公司推荐
  • 做恐怖网站做亚克力在那个网站上好
  • wordpress网站重做会搭建网站找什么工作室
  • 如何建设一免费的网站建设局网站更改法人所需材料
  • 建设部物业证书查询官方网站网页加载流程
  • 毕业设计可以做哪些简单网站h5制作平台排行榜
  • 上海品牌网站制作dz怎么做视频网站
  • 女装网站建设文献综述wordpress恢复旧编辑器
  • 做翻译 网站wordpress 调用随即文章
  • 广西公司搭建网站公司装修估价网
  • 成都旅游网站建设规划一个公司优化需要做多少个网站
  • 企业网站设计需要多久中国室内设计网站官网
  • 做网站前期需求分析收费么无锡设计公司排名
  • wordpress远程执行搜索引擎优化的对比
  • 商店网站源码自己公司网站设计
  • 枣庄做网站制作山西自助建站系统怎么用
  • 广州网站建设网站建设WordPress写文章一直转
  • 网站建设公司兴田德润i简介百度快照手机入口
  • 网站顶部flash全网营销型网站模版
  • 国外做蒸汽锅炉的网站自我介绍ppt模板免费下载
  • 生产 管理 软件 erp东莞企业网站seo
  • 长春建网站一般要多少钱网站网页设计制作教程
  • 网站开发设计工程师职责简介广西建设
  • 只有一个域名怎么做网站企业网站设计网络公司