我自己编写了弹性分析仪,但在配置分析仪时遇到了一些问题。
我按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", "心理", "概论", "理学", "秋"]
我对这个问题很困惑,有人可以告诉我为什么吗?谢谢。
答案 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'