有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用DocValues作为整数的java排序索引?

我使用Lucene实现文本字段的自动完成机制,支持多种语言和多组选项。每组大约有2k到5k个不同的值

目前,我手工查询所有点击,并根据整数值进行排序。因为这效率很低,所以我需要使用doc值创建一个索引。我理解这个理论,但我找不到一个好的代码片段来实现它。我带来了两本书,读了两本,要么没有,要么覆盖得很差(一小段代码)

我的目标是为每个文档索引一个整数值,并按降序排序

另外,我想问一下,我是否错过了市长的文件来源?Lucene文档既不全面,也不易访问。我曾经在实际中使用Lucene,但这本书已经有十年的历史了,Lucene最近的变化在API方面非常引人注目

例如:

  • {姓名:“A1”,编号:1000}
  • {姓名:“A2”,号码:1001}
  • {姓名:“A3”,号码:990}
  • {姓名:“B1”,编号:300}

=查询:A*+按数字排序+top2=>;A3,A1

小结:我目前正在获取所有文档,并在代码中进行排序和修剪(限制),我希望Lucene这样做


该实现使用Java。由于我只使用了一小部分信息,但使用了多种语言,所以我使用RAMDirectory创建了一个索引(是的,我知道它已被弃用,但它可以工作),并使用标准分析器将每个文档添加到一个标准索引编写器中

就我理解需求而言,我需要定义并使用存储在列中的字段,以便使用Lucene进行排序。我试了好几个小时,只是放弃了获取所有信息,并在内存中查找数据和排序+修剪。它确实做到了,但并不令人满意

因此,它所需要的只是在索引中添加一个整数字段,以便在lucene中进行排序


共 (1) 个答案

  1. # 1 楼答案

    使用^{}将字段添加到文档中

    在搜索查询中使用同名的^{}

    Sort sort = new Sort(new SortedNumericSortField("number", SortField.Type.LONG, true));
    TopDocs docs = searcher.search(new MatchAllDocsQuery(), 100, sort);
    

    参见相关问题: How to sort Numeric field in Lucene 6

    我刚在谷歌上搜索了你的用例