Lucene 索尔协会
最近几天,我们正在考虑使用Solr作为我们的搜索引擎选择。 我们需要的大多数功能都是现成的,或者可以轻松配置。 然而,有一个我们绝对需要的特性似乎在Solr中被很好地隐藏(或丢失) 我将试着用一个例子来解释。我们有很多实际业务文档:Lucene 索尔协会,lucene,search-engine,solr,Lucene,Search Engine,Solr,最近几天,我们正在考虑使用Solr作为我们的搜索引擎选择。 我们需要的大多数功能都是现成的,或者可以轻松配置。 然而,有一个我们绝对需要的特性似乎在Solr中被很好地隐藏(或丢失) 我将试着用一个例子来解释。我们有很多实际业务文档: <document> <name>Apache</name> <cat>1</cat> ... </document> <document> <name>
<document>
<name>Apache</name>
<cat>1</cat>
...
</document>
<document>
<name>McDonalds</name>
<cat>2</cat>
...
</document>
阿帕奇
1.
...
麦当劳
2.
...
此外,我们还有一个包含所有类别和同义词的xml文件:
<cat id=1>
<name>software</name>
<synonym>IT<synonym>
</cat>
<cat id=2>
<name>fast food</name>
<synonym>restaurant<synonym>
</cat>
软件
信息技术
快餐
餐厅
我们希望将业务和类别关联起来,以便可以使用类别的名称和/或同义词进行搜索。但是我们不希望在索引时合并这些文件,因为我们应该更新类别(adding.removing同义词…),而不需要再次索引所有业务
Solr中是否有任何东西可以进行这种关联,或者我们是否需要开发一些特定的片段
欢迎所有反馈和建议
提前感谢,,
Tom除非在提交查询之前实现某种查询转换/扩展,将某些查询词转换为索引等价项,否则无法找到未索引的信息片段 因此,如果用户键入“restaurant”,那么您的查询将被转换为包含一个cat=1的过滤器
据我所知,Solr不包括此功能,因此您必须自己实现它或调整合适的模块(如)。基本上您在这里有一个设计决策。人们使用Solr索引的通常做法是对它们进行非规范化,即将类别定义分解到业务文档中。 由于您不想这样做,我建议保留两种类型的文档—一种用于业务,另一种用于类别。您可以将两者保留在同一索引中,因为Solr不要求所有文档都具有相同的字段。业务文档看起来很简单,但您必须让它们可以通过业务名称和类别id进行搜索。我建议为每个同义词创建一个类别文档,在这里您可以通过同义词搜索并找到id(和类别名称) 要使用同义词进行搜索,需要进行双重搜索-
- 使用名称的文本搜索类别id
- 使用类别id搜索企业
- 实际上有一个名为的筛选器类
如果仅在查询分析器中使用cat编号,则应允许您将cat编号映射到其2个文本等价物,如下所示:
<fieldType name="category" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="category_Synonyms.txt" ignoreCase="true" expand="false"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
工具在上面。。结果如下:
正如你所看到的,它已经变成了软件
一,
请注意,您必须设置
扩展
参数到
假的
我希望这有帮助
Dave除了前面提供的一些优秀想法之外,您还可以查看多值字段。因此,在搜索时,您的类别字段可以包含任意数量的值(并在需要时更新),并查询所有值