在我的Lucene文档中,我有一个字段“公司”,其中公司名称被标记化。 我需要为我的应用程序的某个部分进行标记化。 但是对于这个查询,我需要能够在整个公司领域创建一个PrefixQuery。
示例:
定期查询“bra”会返回两个文件,因为它们都有以bra开头的术语 我想要的结果只会返回最后一个条目,因为第一个术语以bra开头。
有什么建议吗?
答案 0 :(得分:1)
创建另一个索引字段,其中公司名称不标记化。必要时,搜索该字段而不是标记化的公司名称字段。
如果您想要快速搜索,则需要索引条目直接指向感兴趣的记录。您可以使用邻近数据来过滤记录,但速度很慢。我将问题视为:如何有效地执行对整个字段的“包含”查询?
您可以通过为(每个当前字段)创建“第一个术语”字段和“剩余术语”字段来最小化索引大小的增加。这将消除两个字段中第一个术语的重复。对于“普通”查询,您可以在其中任何一个字段中查找查询字词。对于“startswith”查询,您只搜索“第一个术语”字段。但这似乎比它的价值更麻烦。
答案 1 :(得分:0)
使用SpanQuery仅搜索第一个字词位置。由SpanPositionRangeQuery包装的SpanMultiTermQueryWrapper包装的PrefixQuery:
<SpanPositionRangeQuery: spanPosRange(SpanMultiTermQueryWrapper(company:bra*), 0, 1)>