2009-03-03 52 views
0

在我的Lucene文档中,我有一个字段“公司”,公司名称被标记。 我需要我的应用程序的某个部分的标记。 但对于此查询,我需要能够在整个公司字段上创建PrefixQuery。使lucene将字段中的所有术语看作单个术语

例子:

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

定期查询“胸罩”将返回两个文件,因为它们都有一个术语开始胸罩。
但我想要的结果只会返回最后一项,因为第一项是以胸罩开始的。

有什么建议吗?

回答

0

使用SpanQuery仅搜索第一个任期的职位。由SpanMultiTermQueryWrapper包装的PrefixQuery由SpanPositionRangeQuery包装:

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

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


如果你想快速搜索,你需要有索引条目直接指向感兴趣的记录。您可以通过近似数据筛选记录,但速度会很慢。我看到这个问题:如何有效地执行整个字段上的“包含”查询?

您可以通过为每个当前字段创建“第一个字段”字段和“剩余字词”字段来最大限度地减少索引大小的增加。这将消除两个领域第一学期的重复。对于“正常”查询,您可以在这些字段中查找查询条件。对于“startswith”查询,只搜索“第一项”字段。但是这似乎比它的价值更麻烦。

+0

这将是一个解决方案,但也会增加我的索引相当多。我将不得不以这种方式(大约15)为我们的所有字段复制2500K +记录。我希望能找到一种方法来简单地在一个完整的领域做一个首发 – 2009-03-03 15:37:51