0

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

例子:

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

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

有什么建议么?

4

2 回答 2

1

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


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

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

于 2009-03-03T14:40:33.937 回答
0

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

<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>
于 2011-10-26T00:56:28.270 回答