代码之家  ›  专栏  ›  技术社区  ›  Salines

Solr6.6:如何定义字段来存储一个帖子的多个段塞变量?

  •  0
  • Salines  · 技术社区  · 6 年前

    我们的任务是按不同类型的slug查找帖子:

    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或从中删除。当搜索引擎优化任务正在进行时,我们需要将所有的搜索引擎优化链接存储在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 回复  |  直到 6 年前
        1
  •  1
  •   MatsLindh    6 年前

    制作你的 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" />
    

    …然后将所有可能的段塞值作为一个数组包含在内。

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

    具体如何做到这一点取决于您将内容提交给solr所使用的代码,但是所有solr库都在某种程度上支持这一点——或者通过多次调用 addField 或者类似的,或者给 加法菲尔德 方法。

    然后可以使用 path_slug:posts/state .