SOLR托管架构,如何使用它?

时间:2016-10-12 01:06:21

标签: solr

我让我的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

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

2 个答案:

答案 0 :(得分:4)

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

如果您想使用类似旧版Solr版本的schema.xml文件而没有任何Schema API支持,则可以在solrconfig.xml文件中使用ClassicIndexSchemaFactory。请参阅Schema Factory Definition

<schemaFactory class="ClassicIndexSchemaFactory"/>
  

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

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

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

精确的架构设计是您必须使用和试验的内容,这样您才能获得查询配置文件和功能,以便进行匹配。

答案 1 :(得分: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命令。我知道,如果有一个动物园管理员,事情会变得棘手,但在单个服务器上进行基本的探索应该是微不足道的,而目前它不是。这种方法将显示格式化的curl命令,因此它将训练新开发人员正确使用。

开发人员必须将xml从这样的文档转换为POST的正确json。

<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>