Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene 索尔协会_Lucene_Search Engine_Solr - Fatal编程技术网

Lucene 索尔协会

Lucene 索尔协会,lucene,search-engine,solr,Lucene,Search Engine,Solr,最近几天,我们正在考虑使用Solr作为我们的搜索引擎选择。 我们需要的大多数功能都是现成的,或者可以轻松配置。 然而,有一个我们绝对需要的特性似乎在Solr中被很好地隐藏(或丢失) 我将试着用一个例子来解释。我们有很多实际业务文档: <document> <name>Apache</name> <cat>1</cat> ... </document> <document> <name>

最近几天,我们正在考虑使用Solr作为我们的搜索引擎选择。 我们需要的大多数功能都是现成的,或者可以轻松配置。 然而,有一个我们绝对需要的特性似乎在Solr中被很好地隐藏(或丢失)

我将试着用一个例子来解释。我们有很多实际业务文档:

<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

      除了前面提供的一些优秀想法之外,您还可以查看多值字段。因此,在搜索时,您的类别字段可以包含任意数量的值(并在需要时更新),并查询所有值