Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在计算文档字段中的正则表达式查询匹配数_Java_Lucene - Fatal编程技术网

Java 正在计算文档字段中的正则表达式查询匹配数

Java 正在计算文档字段中的正则表达式查询匹配数,java,lucene,Java,Lucene,使用Lucene,我可以了解如何创建文档,将值放入相关字段,然后继续使用搜索器搜索索引文档中的匹配项 但是,我现在更关心的是每个文档的特定字段中的匹配数。仅仅知道有一个匹配是可以的,但我想知道有多少次在现场发现的模式 例如 Document doc = new Document(); doc.add(new Field("TNAME", "table_one", Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("CNA

使用Lucene,我可以了解如何创建文档,将值放入相关字段,然后继续使用搜索器搜索索引文档中的匹配项

但是,我现在更关心的是每个文档的特定字段中的匹配数。仅仅知道有一个匹配是可以的,但我想知道有多少次在现场发现的模式

例如

Document doc = new Document();
doc.add(new Field("TNAME", "table_one", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("CNAME", "column_one", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("DATA", "This would be the data found in this particular field of a single document", Field.Store.NO, Field.Index.ANALYZED));
如果我想执行文档搜索,查询“数据”字段以确定满足^d.*模式的次数,我将如何执行?(给出上述文档的结果2)。

简单答案:

IndexSearcher searcher = new IndexSearcher(directory);
    IndexReader reader = searcher.getIndexReader();
    RegexTermEnum regexTermEnum = new RegexTermEnum(reader, new Term(
            "field", "d.*"), new JavaUtilRegexCapabilities());

    do {
        System.out.println("Next:");
        System.out.println("\tDoc Freq: " + regexTermEnum.docFreq());
        if (regexTermEnum.term() != null) {             
            System.out.println("\t"+regexTermEnum.term());
            TermDocs td = reader.termDocs(regexTermEnum.term());
            while(td.next()){
                System.out.println("Found "+ td.freq()+" matches in document " + reader.document(td.doc()).get("name"));
            }
        }
    } while (regexTermEnum.next());
    System.out.println("End.");
答案很简单:

IndexSearcher searcher = new IndexSearcher(directory);
    IndexReader reader = searcher.getIndexReader();
    RegexTermEnum regexTermEnum = new RegexTermEnum(reader, new Term(
            "field", "d.*"), new JavaUtilRegexCapabilities());

    do {
        System.out.println("Next:");
        System.out.println("\tDoc Freq: " + regexTermEnum.docFreq());
        if (regexTermEnum.term() != null) {             
            System.out.println("\t"+regexTermEnum.term());
            TermDocs td = reader.termDocs(regexTermEnum.term());
            while(td.next()){
                System.out.println("Found "+ td.freq()+" matches in document " + reader.document(td.doc()).get("name"));
            }
        }
    } while (regexTermEnum.next());
    System.out.println("End.");

好的,我找到了一种计算与特定正则表达式匹配的数字项的方法:IndexReader=IndexReader.open(directory);RegexTermEnum RegexTermEnum=新的RegexTermEnum(读取器,新术语(“字段”),新的JavaUtilRegexCapabilities());但是,我仍然不知道如何搜索完整索引并在每个文档的字段中找到正则表达式模式匹配的频率。我想我需要的两条信息是:1)索引中的哪个文档与查询有1个或多个匹配项。2) 在每个文档/字段中找到regex查询的次数。好的,我找到了一种方法来计算与特定regex匹配的数字项:IndexReader=IndexReader.open(directory);RegexTermEnum RegexTermEnum=新的RegexTermEnum(读取器,新术语(“字段”),新的JavaUtilRegexCapabilities());但是,我仍然不知道如何搜索完整索引并在每个文档的字段中找到正则表达式模式匹配的频率。我想我需要的两条信息是:1)索引中的哪个文档与查询有1个或多个匹配项。2) 在每个文档/字段中找到regex查询的次数。在Lates Lucene版本(6.6)中,RegexTermEnum的等效类是什么?在Lates Lucene版本(6.6)中,RegexTermEnum的等效类是什么?