Solr 4.0存储和搜索规范化Profile的数据

mta*_*riq 5 indexing search solr search-engine

我正在评估Solr 4.0和Elastic Search 0.20.5以进行linkedin类型搜索,并想知道如何存储用户配置文件的Normalize数据,这可以使用嵌套文档在elasticsearch中轻松实现.

例如
Person Json

{
    first_name: abc,
    last_name: xyz,
    school: [{
      name: some school,
      degree: x-Degree,
      startDate:12-02-2009
   },
   {
      name: some school2,
      degree: x-Degree-2,
      startDate:12-02-2012
   }
   ]

}
Run Code Online (Sandbox Code Playgroud)

我想搜索用户学校名称,学位和目前学习类似​​于linkedin搜索,

在Solr中索引和搜索它的最佳方法是什么?

mta*_*riq 0

索引应该使用多值字段来完成

\n\n
<field name="first_name" indexed="true" />\n<field name="last_name" indexed="true" />\n<field name="school_name" multiValued="true" indexed="true" />\n<field name="school_degree" multiValued="true" indexed="true" />\n<field name="school_start_date" multiValued="true" indexed="true" />\n
Run Code Online (Sandbox Code Playgroud)\n\n


\n搜索, \n搜索像 school_name 这样的单个字段将与普通字段搜索一样简单,但是对多个嵌套字段的搜索应区别对待,

\n\n

将 SpanTermQueries 与 FiledMaskingSpanQuery 组合并将它们放入 SpanNearQuery 中,可以搜索学校位置的交集,并正确找到包含指定项目的人员(school_name:some school 和 school_ Degree:x-Degree):

\n\n
SpanNearQuery(\n    SpanTermQuery("school_name", "some school\xe2\x80\x9d),\n    FieldMaskingSpanQuery(\n               SpanTermQuery("school_degree", "x-Degree"),\n               \xe2\x80\x9cschool_name\xe2\x80\x9d\n    ), -1, false\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考

\n