如何使用API​​添加到架构“\ n”(PatternReplaceCharFilterFactory)?

时间:2017-03-08 15:46:36

标签: json xml solr

我需要删除内容中的所有 \ n 。我决定使用 PatternReplaceCharFilterFactory ,我需要添加到schema.xml

<filter class="solr.PatternReplaceCharFilterFactory" pattern="\n" replace="all" replacement=""/>

使用API​​调用。但是,solr编码这种模式。 我打电话给

curl -X "POST" "http://localhost:$PORT/solr/$CORE_NAME/schema" \
     -H "Content-Type: application/json" \
     -d $'{
  "add-field-type": {
   ........
    "indexAnalyzer": {
      "filters": [
        {
          "class": "solr.PatternReplaceCharFilterFactory",
          "pattern":"\n",
          "replacement":"",
          "replace":"all"
        },]
        ...........
    }

但是solr在schema.xml中创建

      <filter class="solr.PatternReplaceCharFilterFactory" pattern="
 " replace="all" replacement=""/>

我尝试添加 \ n,\ n,(\ n),但结果相同,不起作用。

1 个答案:

答案 0 :(得分:1)

逃脱的反斜杠对我有用:"pattern": "\\n"

我在托管架构文件中检查过:

<fieldType name="myNewTextField" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
    <filter class="solr.PatternReplaceCharFilterFactory" pattern="\n" replace="all" replacement=""/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
  </analyzer>
</fieldType>

所以完整的curl命令看起来像:

curl -X POST -H 'Content-type: application/json' "http://localhost:8983/solr/gettingstarted/schema" -d '{
  "add-field-type": {
    "name": "myNewTextField",
    "class": "solr.TextField",
    "indexAnalyzer": {
      "tokenizer": {
        "class": "solr.PathHierarchyTokenizerFactory",
        "delimiter": "/"
      },
      "filters": [
        {
          "class": "solr.PatternReplaceCharFilterFactory",
          "pattern": "\\n",
          "replacement": "",
          "replace": "all"
        }
      ]
    },
    "queryAnalyzer": {
      "tokenizer": {
        "class": "solr.KeywordTokenizerFactory"
      }
    }
  }
}'