同一Solr核心中的多个索引..?

Ram*_*ngh 3 indexing solr

我正在使用Apache Solr ..我有以下场景..:

我的PostGreSQL数据库中有两个表.一个是" 汽车 ".其他是" 经销商 "

现在我有一个汽车的数据配置文件,如下所示:

<document name="offerings">
    <entity name="jc_offerings" query="select * from jc_offerings" >
        <field column="id" name="id" />
        <field column="name" name="name" />
        <field column="display_name" name="display_name" />
        <field column="extra" name="extra" />
    </entity>
</document>
Run Code Online (Sandbox Code Playgroud)

我有一个类似的数据 - " 经销商 "的config.xml .它与汽车具有相同的字段:名称,额外

现在在我的Schema.xml中,我定义了以下字段:

<fields>
  <field name="id" type="string"   indexed="true" />
  <field name="name" type="name"  indexed="true" />
  <field name="extra" type="extra"  indexed="true"  /> 

  <field name="CarsText" type="text_general" indexed="true" 
    stored="true" multiValued="true"/>
</fields>

<uniqueKey>id</uniqueKey>
<defaultSearchField>CarsText</defaultSearchField>
<copyField source="name" dest="CarsText"/>
<copyField source="extra" dest="CarsText"/>
Run Code Online (Sandbox Code Playgroud)

现在我想搜索:"其中名称是Maruti"..那么Solr将如何知道是否搜索:::汽车领域:名称或经销商字段"名称".. ??

我已阅读以下链接:http://wiki.apache.org/solr/MultipleIndexes

但我无法理解它是如何工作的.

阅读完链接后:我在My Cars and Dealers*data-config.xml*中创建了另一个字段.例如:

<field name="type" value="car" />  : in Cars date-config.xml
Run Code Online (Sandbox Code Playgroud)

<field name="type" value="dealer" />  : in Cars date-config.xml
Run Code Online (Sandbox Code Playgroud)

然后在Schema.xml中我创建了一个新字段:

<field name="type" type="string"   indexed="true" stored="true" />  
Run Code Online (Sandbox Code Playgroud)

然后我查询了类似的东西:

localhost:8983/solr/select?q=name:Maruti&fq=type:dealer

但它工作.. !!

所以我该怎么做..??

Sam*_*zzo 5

如果汽车和经销商的字段相同,您可以使用一个索引,其对象定义如下:

<fields>
  <field name="id" type="string"   indexed="true" stored="true"/>
  <field name="name" type="name"  indexed="true" stored="true" />
  <field name="extra" type="extra"  indexed="true" stored="true" /> 
  <field name="description_text" type="text_general" indexed="true" stored="true" multiValued="true"/>
  <field name="type" type="string" indexed="true" stored="true" />
</fields>
Run Code Online (Sandbox Code Playgroud)

这对汽车和经销商都有效(所以你不需要有2个索引),如果你想要一个"经销商"或"汽车",你将使用"类型"字段进行整理(我正在使用同一系统过滤掉相似类型的对象只有一个较小的"semanthical"差异)

你还需要在你想要检索的字段中添加stored ="true",否则你只能用它们进行搜索(因此index ="true")

  • @Samuele Mattiuzzo建议您在Solr架构中添加一个类型字段.从"cars"向索引添加行时,使用"car"类型插入.从"经销商"向索引添加行时,请插入"经销商"类型.然后查询一个或另一个你会做什么?q =*:*&fq = type:car或?q =*:*&fq = type:dealer.希望这可以帮助. (3认同)