Elasticsearch自定义分析器配置

时间:2015-03-19 09:15:47

标签: elasticsearch elasticsearch-plugin

我自己编写了弹性分析仪,但在配置分析仪时遇到了一些问题。

我按bin/plugin --url file:///[path_to_thulac.jar] --install analysis-smartcn安装了我的分析器(基于smartcn,所以它的名字是smartcn)。并通过

配置映射
curl -XPUT 'http://localhost:9200/about-index/_mapping/about' -d '
{
    "properties": {
        "searchable_text": {
            "type": "string",
            "analyzer": "smartcn"
        }
    }
}'

当我致电curl -XGET 'localhost:9200/_analyze?analyzer=smartcn&pretty' -d '心理学概论'时,我得到了'心理学'& '概论',这是我想要的答案。

但是当我打电话给搜索api时

curl 'http://localhost:9200/title-index/_search?pretty=true' -d '{
    "query" : {
        "query_string": {
            "default_field": "searchable_text",
            "query": "心理",
            "analyzer": "smartcn"
        }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "searchable_text"
            }
        }
    }
}'

我得到terms: ["2014", "心理", "概论", "理学", "秋"]我对这个问题很困惑,有人可以告诉我为什么吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您的映射设置不正确。通过正确设置映射,您的查询甚至不应返回此记录。如果您应用分析仪,如下例所示:

curl -XDELETE "localhost:9200/test-idx?pretty"
curl -XPUT "localhost:9200/test-idx?pretty" -d '{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "doc": {
            "properties": {
                "searchable_text": { "type": "string", "analyzer": "smartcn" }
            }
        }
    }
}
'
curl -XPUT "localhost:9200/test-idx/doc/1?pretty" -d '{
    "searchable_text": "心理学概论2014秋"
}'
curl -XPOST "localhost:9200/test-idx/_refresh?pretty"

以下搜索请求

curl "localhost:9200/test-idx/_search?pretty=true" -d '{
    "query" : {
        "query_string": {
            "default_field": "searchable_text",
            "query": "心理学"
        }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "searchable_text"
            }
        }
    }
}
'

将返回:

"fields" : {
  "terms" : [ [ "2014", "心理学", "概论", "秋" ] ]
}

您也可以从分析仪获得相同的结果:

curl -XGET 'localhost:9200/test-idx/_analyze?field=doc.searchable_text&pretty' -d '心理学概论2014秋'

{
  "tokens" : [ {
    "token" : "心理学",
    "start_offset" : 0,
    "end_offset" : 3,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "概论",
    "start_offset" : 3,
    "end_offset" : 5,
    "type" : "word",
    "position" : 2
  }, {
    "token" : "2014",
    "start_offset" : 5,
    "end_offset" : 9,
    "type" : "word",
    "position" : 3
  }, {
    "token" : "秋",
    "start_offset" : 9,
    "end_offset" : 10,
    "type" : "word",
    "position" : 4
  } ]
}

执行以下命令以确保正确应用映射:

curl -XGET 'http://localhost:9200/about-index/_mapping'