导航:首页 > 净水问答 > lucene过滤重复

lucene过滤重复

发布时间:2022-11-06 19:03:30

⑴ lucene 多个 filter 怎么同时过滤

BooleanQuerybooleanQuery=newBooleanQuery();
booleanQuery.add(newBooleanClause(NumericRangeQuery.newIntRange("age",18,Integer.MAX_VALUE,true,true),BooleanClause.Occur.MUST));
booleanQuery.add(newBooleanClause(newTermQuery(newTerm("sex","男")),BooleanClause.Occur.MUST));

Filterfilter=newQueryWrapperFilter(booleanQuery);

searcher.search(query,filter,20);

//用的是容lucene4.10.3

⑵ lucene.net TopScoreDocCollector 分页查询出现重复数据,求高手指教

这有两种情况,一:看是否是前一页的最后一篇文档和这页的最上面的一篇文档重复;二是你建索引的时候就有文档重复的情况。

⑶ 如何用lucene实现正则表达式查询

在输出的document上进行二次判断过滤,支持数值比较,字符串模糊查询,正则式查询,或则其他更复杂的查询都没问题。 但这种方式,是对lucene输出结果的过滤,不是lucene核心的功能。

⑷ lucene搜索的时候可以去掉重复的索引只取一条吗

这个可能是对数据库里的同一条记录建了多次索引就出现重复的了。 maxrocray 写道 理论上内当容然是可以的。 不过你要写个比较复杂的filter,对重复的索引的那个不同的field进行过滤。 过滤的规则,我想会根据你这个重复的索引的情况而定,可能会很复杂。 所以,常规来说,我们会对索引进行优化和整理,不允许重复的索引。

⑸ lucene检索,必须完全包含我筛选的关键字,只包含其中一个字的要过滤掉,怎么设置

这个要看你的搜索关键词是什么,采用的分词器是什么,比如你搜索的关键词是“搜索引擎”,如果采用的分词器的分词结果就包含“搜索引擎‘这个词,那么采用TermQuery就可以了;如果采用的分词器的分词结果不是“搜索引擎‘这个词,而是”搜索“和”引擎“这两个词,那么要采用PhraseQuery,setSlop(0),这样就可以搜索出同时包含”搜索“和”引擎“这两个词并且这两个词紧挨着的所有文章了。

⑹ 如何提高lucene的效率

如何提高Lucene的搜索速度 译自http://wiki.apache.org/lucene-java/ImproveSearchingSpeed 这里讨论了提高基于Lucene的应用程序搜索速度的几种方法。如果你想提高索引的速度请阅读“如何提高Lucene构建索引的速度”。 首先确定你需要加快搜索速度。这里的很多方法很容易尝试但是有些会增加你程序的复杂性。所以请首先确定搜索速度确实太慢而且速度问题确实是Lucene导致的。 确保你使用的是最新版本的Lucene。 使用本地文件系统。 远程文件系统搜索的速度总是会慢一些。如果你的索引必须放在远程文件系统之上那么可以考虑把远程文件系统用“只读方式”加载mount。某些时候这会改善性能。 使用更快的硬件尤其是更快的IO系统。 固态硬盘solid-state diskSSD非常适合Lucene的搜索。SSD的寻道时间大概是传统磁盘式硬盘的100倍也就是说常见的寻道时间造成的开销几乎可以忽略掉了。也就是说装有SSD的机器无需太多的内存作为文件缓存搜索器在允许反应之前需要的预热warm-up时间更短。 调节操作系统。 Linux可以调节的一个典型的参数是swappiness参看http://kerneltrap.org/node/3000译注可理解为交换系统调节物理内存和交换分区使用倾向的这个参数控制了操作系统把内存交换出到IO缓存的倾向性。这个参数在大多数Linux发行版中的默认设置都是一个很大的数也就是说倾向于交换分区这容易造成严重的搜索延迟特别是在查询频率不高的情况下搜索一个大的索引时。请尝试把swappiness调低甚至关闭把它设置为0。Windows也有一个选框在我的电脑-属性-高级-性能设置-内存使用允许你选择倾向于应用程序还是系统缓存好像也是起这个作用的。 使用readOnlytrue选项打开IndexReader。 在多线程共享同一个reader的时候这将起巨大的作用因为这样会去掉处理线程冲突的代码。 在非Windows平台使用NIOFSDirectory取代FSDirectory。 这样访问这些文件的时候也会去掉处理线程冲突的代码。不幸的是由于Sun JRE Windows版本长期存在的bughttp://bugs.sun.com/bugdatabase/view_bug.dobug_id6265734NIOFSDirectory在Windows下表现很差。 使用IndexSearcher的同一个实例。 在程序的查询和线程之间使用单一的一个IndexSearcher的实例。 测量性能的时候忽视第一条查询。 对搜索器的第一次查询要付出初始化缓存的代价特别是按照字段排序的时候会干扰你的结论假设你重用搜索器进行多次查存。另外一方面如果你一遍遍的重复同样的查询结论也会被扭曲因为操作系统会使用它的缓存加速IO操作。Linux核心2.6.16或者更新版本下你可以用命令 sync echo 3 /proc/sys/vm/drop_caches 来清空缓存。参见http://linux-mm.org/Drop_Caches。 仅在需要的时候重新打开IndexSearcher。 只有在需要让最新提交的更新出现在搜索中的时候才应该重新打开IndexSearcher。注意重新打开搜索器有它的开销在大的索引和排序打开的情况下可以被察觉到的必须将这一开销最小化。可以考虑在面对第一个查询之前使用预热技术对缓存进行预热。 搜索前对你的索引进行优化optimize。 优化optimize过的索引只有一个段这样通常比多个段速度快得多尤其是对于大的索引。如果你的程序不经常更新索引那么最好是先构建索引然后优化使用优化过的索引进行搜索。如果你的索引更新频率很高而且更新后就要刷新搜索器的话那么优化对你的开销就太大了你可以采用降低合并因子的方法。 降低合并因子mergeFactor。 小的合并因子意味着更少的段和更快的搜索。然而这将降低索引的速度所以你应该测试这个值直到找到对于你的程序满足平衡的值。 限制保存字段和词向量的使用。 从索引中获取这些信息开销太大。一般来说你应该只获取用户看前可见的“页”内的条目的这些信息而不是整个结果集的。针对每个获取的文档Lucene必须寻道到不同文件的不同位置。尝试首先用docID排序你要获取的文档译注有可能提高寻道效率。 在你获取一个文档时使用FieldSelector仔细的选择要载入哪些字段以及如何载入他们。 不要枚举比所需命中结果更多的结果。 枚举所有的命中很慢有两个原因。首先返回Hits对象的search方法在你需要超过100个命中的时候需要内部重新执行搜索。解决方法用带有HitCollector的search方法代替。其次命中通常遍布磁盘的每个角落访问全部需要大量的I/O活动。这很难避免除非索引小到可以直接放到内存里。如果你不需要完整的文档而只需要一个小的字段那么你可以用FieldCache类来缓存它这样就可以告诉访问它了。 使用模糊查询fuzzy query的时候设置最小的前缀长度。 模糊查询执行耗费CPU的字符串比较——要避免将用户输入的词和所有的索引的词项进行比较应该只比较前“N”个字符相同的词项。前缀长度是QueryParser和FuzzyQuery都有的参数默认为0所有的词项都要比较。 考虑使用过滤器filter。 把结果限定在索引的一部分时使用缓存的位域过滤器比使用查询条件高效得多。尤其是在限制条件包含了一个大索引的大量文档时。过滤器通常用于限定一个分类下的结果但是可以在很多中情况下替代任何查询条件。查询和过滤之间的一个区别在于查询影响结果评分过滤不影响。 找到瓶颈。 复杂的查询分析或者对结果过度处理是隐藏的搜索瓶颈的例子。使用VisualVM这样的工具profile程序可以帮助定位这些问题。

⑺ lucene5.0自定义过滤器如何使用

“石头”跟生来化棉起到的源只是维持硝化系统的作用,而硝化系统的作用是分解NH3等水体中有毒有害物质,这个跟你所说的水体清澈无关。水体里固体废物的过滤还是需要物理过滤,即过滤棉/白棉。你看到的没有滤棉的过滤很可能是用了前置滤桶,里面全是滤棉?

⑻ lucene 怎么在query完成后进行过滤去重

Query中抽象类,TermQuery只是多个其具体实现之一而已。如果还不明白,就查一下什么是抽象灰。

⑼ Lucene3.0如何防止索引被重复创建

lucene3.0建索引的构造方法为:
new
IndexWriter(Directory
d,
Analyzer
a,
boolean
b);
b为true的时候意思是重建索引,也就是删除之前的索引重新建立索引。
b为false的时候意思是增量创建索引,就是该目录下有索引我就再创建一遍,没有的话就报错。
我做索引的时候就写的是ture。

⑽ lucene通过文件内容查询文件路径出现重复记录,怎么解决

建索引代码:
private Document[] fileContentConvertDoc() {
File f = new File(fileLuceneConfig.getDocFilePath());
List<File> allowFiles = new LinkedList<File>();
allowFiles = getAllowFiles(f, allowFiles);
Document[] documents = new Document[allowFiles.size()];
int i = 0;
for (File tmp : allowFiles) {
this.baseExtractor = AbstractExtractorFactory.getBaseExtractor(tmp
.getName());
documents[i] = new Document();
// 文件名,不分词的索引,但存储
documents[i].add(new Field("fileName", tmp.getName(),
Field.Store.YES, Field.Index.NOT_ANALYZED));
// 文件绝对路径,不索引,但存储
documents[i].add(new Field("filePath", tmp.getAbsolutePath(),
Field.Store.YES, Field.Index.NO));
// 文件内容,分词索引,但不存储,根据路径来加载
try {
documents[i].add(new Field("fileContent", baseExtractor
.getContent(new FileInputStream(tmp)), Field.Store.NO,
Field.Index.ANALYZED));
} catch (FileNotFoundException e) {
log.debug(new StringBuffer("文件名为:").append(tmp.getName()).append("的文件没有找到,无法对该文件内容建立索引!"));
}
i++;
}
return documents;
}

public void indexDocs() {
FSDirectory fsDirectory = null;
try {
fsDirectory = FSDirectory.open(new File(luceneConfig.getIndexDirPath()));
RAMDirectory ramDirectory = new RAMDirectory();
IndexWriter fsWriter = new IndexWriter(fsDirectory, AnalyzerFactory.getAnalyzer(luceneConfig), true, MaxFieldLength.UNLIMITED);
IndexWriter ramWriter = new IndexWriter(ramDirectory, AnalyzerFactory.getAnalyzer(luceneConfig), true, MaxFieldLength.UNLIMITED);
Document[] documents = this.luceneConfig.getAbstractDocument().getDocuments();这里实际就是调用上面那个方法将每个目标目录下每个文件构建成单独的Document
int i = 0;
for (Document d : documents) {
ramWriter.addDocument(d);
if (i % 10 == 0) {
fsWriter.addIndexesNoOptimize(new Directory[]{ramDirectory});
ramWriter.close();
ramWriter = new IndexWriter(ramDirectory, AnalyzerFactory.getAnalyzer(luceneConfig), MaxFieldLength.UNLIMITED);
}
fsWriter.optimize();
fsWriter.commit();
}
fsWriter.close();
ramWriter.close();
} catch (IOException e) {
e.printStackTrace();
}

搜索代码:通过fileContent内容找出对应的filePath
public String[] searchDoc(SearchModel searchModel, String returnField) {
try {
Analyzer analyzer = AnalyzerFactory.getAnalyzer(luceneConfig);
QueryParser parser = new QueryParser(Version.LUCENE_30,searchModel.getSearchField(),analyzer);
Query query = parser.parse(searchModel.getSearchContent());

IndexSearcher seacrcher = new IndexSearcher(FSDirectory.open(new File(luceneConfig.getIndexDirPath())),true);
TopDocs ts = seacrcher.search(query,null,100);
int totalHits = ts.totalHits;
ScoreDoc[] scoreDocs = ts.scoreDocs;
String[] values = new String[scoreDocs.length];
for (int i = 0; i < scoreDocs.length; i++) {
//根据命中的文档的内部编号获取该文档
Document hitDoc = seacrcher.doc(scoreDocs[i].doc);
//获取该文档指定域的值
values[i] = hitDoc.getField(returnField).stringValue();
System.out.println(values[i]);
}
return values;
}catch (FileNotFoundException e) {
if (-1 < e.getMessage().indexOf("no segments* file found")) {
log.error(new StringBuffer(luceneConfig.getIndexDirPath()).append("目录没有索引文件!"));
}
} catch (ParseException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

public static void main(String[] args) {
FileLuceneConfig fileLuceneConfig = new FileLuceneConfig("E:\\Lucene\\test\\target");
fileLuceneConfig.setIndexDirPath("E:\\Lucene\\test\\index\\file");//这是索引存放目录
fileLuceneConfig.setAnalyzerType("SC");

SearchModel searchModel = new SearchModel("人民","fileContent");
LuceneSearcher luceneSearcher = new LuceneSearcher(fileLuceneConfig);
luceneSearcher.searchDoc(searchModel,"filePath");
}

查询结果,有重复记录:
E:\Lucene\test\target\c.txt
E:\Lucene\test\target\b.txt
E:\Lucene\test\target\b.txt
这里,我们先不管分词器如何分词,我希望出来的结果应该是:
E:\Lucene\test\target\c.txt
E:\Lucene\test\target\b.txt
不会出现两条E:\Lucene\test\target\b.txt记录,请高手指定,为什么这里会有重复,如何做才能得到不重复的记录呢?

阅读全文

与lucene过滤重复相关的资料

热点内容
猫为什么要打翻饮水机 浏览:309
airx空气净化器怎么连手机 浏览:620
热熔污水管对接怎么做 浏览:699
怎样做可剥离丙烯酸树脂 浏览:987
汕尾城区农村污水ppp中标 浏览:353
污水泵用什么机封 浏览:249
饮水机为什么有两个阀门 浏览:27
陶氏超滤膜生产基地 浏览:142
过滤所需要用的玻璃仪器 浏览:384
霍曼三代饮水机滤芯怎么拆开 浏览:848
武汉消毒车载型空气净化器多少钱 浏览:357
注入版wpe过滤器怎么用 浏览:501
小米净水器一直亮出水怎么回事 浏览:680
垃圾站怎么处理污水 浏览:600
柠檬酸除垢剂只能除水垢吗 浏览:470
呼和浩特污水厂在哪 浏览:628
盐酸水壶除垢 浏览:254
阴离子交换柱多糖上样量 浏览:6
脱硫废水旋流子堵塞原因 浏览:402
石灰乳去铬离子 浏览:407