lucene索引和搜索策略应该为最终用户提供一组不相关的业务对象?

时间:2012-12-31 10:07:40

标签: lucene.net lucene

我希望为最终用户提供对所有业务对象进行自由格式搜索的能力。用户将提供Lucene搜索表达式。业务对象完全不相关,没有任何共同之处。

每个业务对象都包含自己的特定属性。为了这个问题,以下是业务对象:

博客 {     标题;     身体; }

用户 {     名字;     姓;     国家;     电子邮件地址;     性别(男/女); }

如何创建可以提供以下用例的索引:

  1. 自由格式文本搜索 - 博客和用户。对于例如搜索出现“印度”一词的用户和博客条目。不应要求最终用户在所有Lucene文档字段之间指定ORing。

  2. 仅针对用户的自由格式文本搜索。对于例如搜索出现“yahoo”一词的用户。不应要求最终用户在与User相关的所有Lucene文档字段之间指定ORing。

  3. 仅对博客条目进行自由格式文本搜索。对于例如搜索那些出现“Skeet Async”字样的博客条目。不应要求最终用户在与Blog相关的所有Lucene文档字段之间指定ORing。

  4. 按博客条目的属性搜索自由格式文本。对于例如搜索“标题”属性中出现“异步”的博客条目。

  5. 按用户属性进行自由格式文本搜索。对于例如搜索“Skeet”出现在“LastName”属性中的用户。

  6. 如何定义索引策略 - 单个索引或多个索引,要使用的分析器,如何在搜索查询中提供上下文等。

    感谢。

1 个答案:

答案 0 :(得分:1)

对于给定的业务对象,最简单的方法是使用以下字段的lucene文档:

title, body, firstName, lastName, country, emailAddress, gender

您可能希望将标题和用户相关字段设为STORED。

分析器的选择取决于您的搜索要求(如您想支持部分匹配,后缀查询,词干等)。

查询给定的用例:

1) title:india OR body:india OR country:india
2) title:yahoo OR body:yahoo OR emailAddress:yahoo
3) title:(Skeet OR Async) OR body:(Skeet OR Async)
4) title:asynchronous
5) lastName:skeet