【问题标题】:SOLR managed-schema, how to use it?SOLR托管模式,如何使用它?
【发布时间】:2018-03-07 04:40:12
【问题描述】:

我让我的 SOLR 工作了,它工作得很好,但我不知道托管模式到底是什么,因为我确实使用了默认版本,在该版本中我添加了我的案例所需的几行

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="text_general" indexed="true" stored="true" default="" />
<field name="brand_id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="brand_name" type="text_general" indexed="true" stored="true" default="" />
<field name="type" type="string" indexed="true" stored="true" required="true" default="0"  />

我不能包含完整的文件,因为大概有 700 行... 但是完整的xml在这里http://pastebin.com/Z9nc36QD

我必须将所有内容都保留为默认示例吗?我没有任何线索... 你有典型模式文件的例子吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    您应该使用 Solr 的 Schema API。更多信息可以在这里找到:https://lucene.apache.org/solr/guide/7_2/schema-api.html

    这基本上意味着您从 shell 发出 curl -X POST(到 localhost)来编辑文件。

    例子:

    :curl -X POST -H 'Content-type:application/json' --data-binary '{
     "add-field-type" : {
     "name":"myNewTxtField",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer" : {
        "charFilters":[{
           "class":"solr.PatternReplaceCharFilterFactory",
           "replacement":"$1$1",
           "pattern":"([a-zA-Z])\\\\1+" }],
        "tokenizer":{
           "class":"solr.WhitespaceTokenizerFactory" },
        "filters":[{
           "class":"solr.WordDelimiterFilterFactory",
           "preserveOriginal":"0" }]}}
    }' http://localhost:8983/solr/gettingstarted/schema`
    

    个人评论

    现在是 2018 年,他们现有的管理控制台确实应该只有一个 Web 界面来构建和发出这些 localhost 命令。我知道如果有 zookeeper,事情会变得很棘手,但是基本在单个服务器上的探索应该是微不足道的,目前还不是。这种方法将显示格式化的curl 命令,以便培训新开发人员正确使用。

    开发人员必须将此类文档中的 xml 转换为正确的 json 用于 POST。

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true"
            words="stopwords.txt" />
        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory"
          synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" 
          ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" 
          synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    

    【讨论】:

    • 非常感谢!这很有帮助。 :-)
    【解决方案2】:

    托管架构应该通过Schema API 进行操作,而不是通过编辑存在的文件(包括这样做的警告)。 schema.xml 文件仅在第一次启动时读取一次以创建初始架构,之后的任何更改都必须通过 Schema API 完成。

    如果您想像旧版 Solr 一样使用 schema.xml 文件,但没有任何 Schema API 支持,您可以在 solrconfig.xml 文件中使用 ClassicIndexSchemaFactory。见Schema Factory Definition

    <schemaFactory class="ClassicIndexSchemaFactory"/>
    

    使用托管模式的替代方法是显式配置 ClassicIndexSchemaFactory。 ClassicIndexSchemaFactory 需要使用 schema.xml 配置文件,并且不允许在运行时对 Schema 进行任何编程更改。 schema.xml 文件必须手动编辑,只有在加载集合时才会加载。

    您只需要保留您实际使用的架构部分,示例架构(取决于用户开始使用的架构)通常会有很多很多您不需要的字段和字段类型。这些可以在需要时删除,并且可以调整字段类型以启用您想要的功能。

    但是请记住,对架构的更改将需要重新索引内容,以便在搜索时可以看到更改。

    精确的架构设计是您必须使用和试验的东西,以便您能够获得查询配置文件和匹配所需的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2016-11-26
      • 1970-01-01
      • 2018-11-03
      • 2023-04-03
      • 2015-08-15
      • 1970-01-01
      • 2016-02-04
      相关资源
      最近更新 更多