Solr 6.6:如何为一个帖子定义字段来存储多个弹头变化?

时间:2019-01-18 10:15:08

标签: solr

我们有任务来按各种类型的子弹查找帖子:

posts/state
posts/city-name
posts/city-name/category
posts/city-name/category/subcategory
posts/long-title-slug
posts/category
posts/... what our seo expert want

我们将所有帖子存储在mariadb中,并根据更改将数据推送至SOLR或从中删除。在seo任务开槽时,我们需要将所有seo链接存储在SOLR中。我们每个帖子的搜索引擎优化版本数量未知。

我们需要定义字段以存储一个帖子的多个子弹变化。怎么做?

更新当前的SOLR模式

  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
  <field name="title" type="text" multiValued="false" indexed="true" stored="true"/>
  <field name="facet_title" type="string" indexed="true" stored="true"/>
  <field name="facet_title_length" type="int" indexed="true"  stored="true" multiValued="false"/>
  <field name="slug" type="string" indexed="true" stored="true"/>
  <field name="description" type="text" indexed="true" stored="true"/>

  <field name="company_name" type="string" indexed="true" stored="true"/>
  <field name="logo" type="string" indexed="false" stored="true"/>
  <field name="cpc" type="string" indexed="false" stored="true"/>
  <field name="date" type="string" indexed="true" stored="true"/>

  <field name="location" type="text" indexed="true" stored="true"/>
  <field name="city" type="text" indexed="true" stored="true"/>
  <field name="postalcode" type="text" indexed="true" stored="true"/>
  <field name="address" type="text" indexed="true" stored="true"/>

  <field name="industry" type="string" indexed="true" stored="true"/>

  <field name="externalid" type="string" indexed="false" stored="true"/>
  <field name="externalurl" type="string" indexed="false" stored="true"/>

  <field name="premium" type="boolean" indexed="true" stored="true" default="false"/>
  <field name="source" type="string" indexed="true" stored="true"/>

  <field name="created" type="string" indexed="true" stored="true"/>
  <field name="modified" type="string" indexed="true" stored="true"/>

  <field name="hits" type="int" indexed="true"  stored="true" multiValued="false"/>

1 个答案:

答案 0 :(得分:1)

使您的slug字段成为多值:

<field name="slug" type="string" indexed="true" stored="true" multiValued="true" />

..并在其中存储所有可能的子弹变化。如果您今天只在该字段中存储long-title-slug,并希望保持这种方式,请添加一个新字段:

<field name="path_slug" type="string" indexed="true" stored="true" multiValued="true" />

..然后将其中的所有the的可能值都包含在数组中。

['posts/state', 'posts/city-name', ....]

确切的操作方式取决于用来向Solr提交内容的代码,但是所有Solr库都以某种方式支持此操作-通过多次调用addField或类似方法,或者提供一个数组到addField方法。

然后您可以使用path_slug:posts/state对该子弹进行查询。