Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 如何从Lucene 5.x中的字段中获取n个第一项?_Java_Eclipse Plugin_Lucene - Fatal编程技术网

Java 如何从Lucene 5.x中的字段中获取n个第一项?

Java 如何从Lucene 5.x中的字段中获取n个第一项?,java,eclipse-plugin,lucene,Java,Eclipse Plugin,Lucene,我正在使用Lucene作为Eclipse插件。目前,我对索引术语进行了如下迭代: 我使用IndexReader.getTermVector(id,field)获得一个Terms实例 我使用以下术语遍历这个实例:while((text=vectorEnum.next())!=null) 另外,我想得到一个域的前n个元素。我想我必须使用PostingsEnum来完成这个任务,但我不知道如何使用它。我想我可以通过在我的TermsEnum上调用postings()来获得它,但我不知道该怎么办 编辑: 我

我正在使用Lucene作为Eclipse插件。目前,我对索引术语进行了如下迭代:

  • 我使用IndexReader.getTermVector(id,field)获得一个Terms实例
  • 我使用以下术语遍历这个实例:
    while((text=vectorEnum.next())!=null)
  • 另外,我想得到一个域的前n个元素。我想我必须使用PostingsEnum来完成这个任务,但我不知道如何使用它。我想我可以通过在我的TermsEnum上调用postings()来获得它,但我不知道该怎么办

    编辑: 我想这是我代码的重要部分:

    Terms vector = indexReader.getTermVector(id, field);
    BytesRef text = null; 
    if (vector != null) {
                    TermsEnum vectorEnum = vector.iterator();
                    while ((text = vectorEnum.next()) != null) {
                        String term = text.utf8ToString();
                        [do stuff]
                    }
    
    这就是字段类型:

    FieldType fieldType = new FieldType();
    fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
    fieldType.setStored(true);
    fieldType.setStoreTermVectors(true);
    fieldType.setTokenized(true);
    

    不知道为什么,但使用setIndexOptions请求位置似乎不起作用,因此必须显式设置setStoreTermVectorPositions。您仍然必须将索引选项设置为NONE以外的其他选项,但似乎没有必要使用DOCS_和_FREQS_和_POSITIONS,即

    fieldType.setIndexOptions(IndexOptions.DOCS);
    fieldType.setStoreTermVectorPositions(true);
    
    然后您可以访问以下位置:

    Terms vector = indexReader.getTermVector(id, field);
    if (vector != null) {
        TermsEnum vectorEnum = vector.iterator();
        BytesRef text;
        while ((text = vectorEnum.next()) != null) {
            String term = text.utf8ToString();
            PostingsEnum postings = vectorEnum.postings(null, PostingsEnum.POSITIONS);
            while (postings.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                int freq = postings.freq();
                while (freq-- > 0)
                    logger.info("Position: {}", postings.nextPosition());
            }
        }
    }
    

    发布你的全部代码我在问题中编辑了一些代码。但是我想我需要一些新的东西,而不是我的代码修复,因为我现在使用的工具没有提供我需要的功能。