我正在将我的MVC应用程序(使用MySql)中的全文搜索更改为Lucene .NET。 我的个性化搜索有一些怪癖,我在Lucene中复制时遇到了麻烦。
最重要的是:
客户1在其联系人列表中有客户2,并为他分配了一个关键字,让我们说“妈妈”。这是一个私人关键字,只有客户1可以看到它,并且只有在客户1搜索时才有效。
客户1搜索“妈妈”:
客户2搜索“妈妈”:
基本上,它是带有用户标识符的标记。
我如何在Lucene中这样做?
我能想到的唯一方法是为每个用户提供一个私有索引,其中包含文档中的关键字,并使用我的标准索引和用户私有索引进行搜索。 问题是我最终会得到千分之一的索引......我不知道这是否真的有效。
有没有办法在文档的字段中设置内容以便我可以保存用户ID并仅在id匹配时在那里搜索?
感谢
编辑:
要求是关键字“MOM”被添加到文档“Customer 2”中,但我只能在Customer 1搜索时使用该关键字。 如果客户2搜索他自己,它将使用除关键字一之外的所有其他字段。
答案 0 :(得分:1)
一种方法是在每个包含客户ID及其私人关键字的文档中添加一个字段,这样您最终会将 Customer1:mom 等内容编入索引。每次用户搜索私人关键字时,他们的客户ID和私人关键字都会包含在查询中(例如上面的 Customer2:mom )。
问题在于,您可能需要预先解析查询以转换私有关键字。如果在UI中单独输入私人关键字,则无需执行此操作。
根据您的设置,此方法可能需要在索引中添加更多字段,但至少它可能仍然是1个索引,而不是数千个。