使lucene将字段中的所有项视为单个项

使lucene将字段中的所有项视为单个项,lucene,Lucene,在我的Lucene文档中,我有一个字段“company”,其中公司名称被标记。 我需要对我的应用程序的某个部分进行标记化。 但是对于这个查询,我需要能够在整个company字段上创建一个PrefixQuery 例如: 我的品牌 我的 烙印 婆罗门农场 婆罗门 农场 定期查询“bra”将返回这两个文档,因为它们都有以bra开头的术语。 不过,我想要的结果将只返回最后一个条目,因为第一个术语以bra开头 有什么建议吗?创建另一个索引字段,其中公司名称没有标记。必要时,搜索该字段,而不是标

在我的Lucene文档中,我有一个字段“company”,其中公司名称被标记。 我需要对我的应用程序的某个部分进行标记化。 但是对于这个查询,我需要能够在整个company字段上创建一个PrefixQuery

例如:

  • 我的品牌
    • 我的
    • 烙印
  • 婆罗门农场
    • 婆罗门
    • 农场
定期查询“bra”将返回这两个文档,因为它们都有以bra开头的术语。
不过,我想要的结果将只返回最后一个条目,因为第一个术语以bra开头


有什么建议吗?

创建另一个索引字段,其中公司名称没有标记。必要时,搜索该字段,而不是标记化的公司名称字段


如果您想要快速搜索,您需要有直接指向感兴趣记录的索引项。也许可以使用邻近数据来过滤记录,但速度会很慢。我认为问题在于:如何有效地执行对完整字段的“包含”查询

您可以通过(为每个当前字段)创建“第一个术语”字段和“剩余术语”字段来最小化索引大小的增加。这将消除两个领域中第一个术语的重复。对于“普通”查询,可以在这些字段中查找查询词。对于“startswith”查询,您只搜索“第一个术语”字段。但这似乎比它的价值要麻烦得多。

使用a仅搜索第一个术语位置。由spanMultiTermQueryRapper包装的前缀查询由SpanPositionRangeQuery包装:

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>

这将是一个解决方案,但也会大大增加我的索引。我将不得不以这种方式复制所有字段(大约15个),以获得25000K+记录。我希望能找到一种简单的方法,在一个完整的领域里做一个开始