【发布时间】:2016-03-03 07:33:41
【问题描述】:
为简单起见,请考虑具有以下字段和值的两个文档:
RecordId: "12345"
CreatedAt: "27/02/1992"
Event: "Manchester, Dubai, Paris"
Event: "Manchester, Rome, Madrid"
Event: "Madrid, Sidney"
RecordId: "99999"
CreatedAt: "27/02/1992"
Event: "Manchester, Barcelona, Rome"
Event: "Rome, Paris"
Event: "Milan, Barcelona"
是否可以在“事件”字段的单个实例中搜索多个术语?
假设我想搜索“曼彻斯特”和“巴黎”以出现在同一字段中。 第二条记录包含“Manchester”和“Paris”,但在 Event 字段的不同实例上,这不应该是结果集的一部分。
理想情况下,结果集只是第一条记录 (12345)。
【问题讨论】:
-
嘿,鹈鹕。可能为每个 Event 字段索引每条记录 (RecordID) 一次,并为每个 Event 字段加上 RecordID 的后缀。在您的示例中,您将有六个索引 12345-1。 12345-2。 12345-3 等。您最终会得到一个更大的索引,并且您需要过滤掉重复的命中(例如,如果您还有一个“曼彻斯特、底特律、巴黎”事件),但我认为它会起作用.
-
我明白你的意思,但从长远来看,这种方法最终会让我做噩梦。不过,它会起作用。
-
是的,我没有将其作为正式答案,因为它看起来很笨拙,即使它会起作用。如果您采用这种方法,请告诉我。
-
@MichaelGorsich 只是为了跟进您的评论,您将如何在运行时对这些字段执行搜索,而不知道它们的名称值。 (例如 12345-1、12345-2、12345-3 等)?
-
在您的示例中,加上我第一条评论中的示例,“曼彻斯特”和“巴黎”的结果将为您提供 12345-1 和 12345-4。您最初会累积所有结果,然后去掉后缀 (LastIndexOf()) 并消除重复项以将结果减少到 12345,因此最终得到一个结果,您可以使用它来检索文档。
标签: lucene lucene.net