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

时间:2009-03-03 14:28:04

标签: lucene

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

示例:

  • 我的品牌
    • 品牌
  • 婆罗门农场
    • 婆罗门
    • 农场

定期查询“bra”会返回两个文件,因为它们都有以bra开头的术语 我想要的结果只会返回最后一个条目,因为第一个术语以bra开头。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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


如果您想要快速搜索,则需要索引条目直接指向感兴趣的记录。您可以使用邻近数据来过滤记录,但速度很慢。我将问题视为:如何有效地执行对整个字段的“包含”查询?

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

答案 1 :(得分:0)

使用SpanQuery仅搜索第一个字词位置。由SpanPositionRangeQuery包装的SpanMultiTermQueryWrapper包装的PrefixQuery:

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