公式の ElasticSearch クライアントに基づくmongoosasticを使用しています。Mongoosastic は、MongoDB で ElasticSearch を使用できるようにするプラグインです。私は次のような基本的なクエリを実行しました
NodesModel.search({
"query_string": {
"query": "developed"
}
}, function(err, results) {
console.log(err, JSON.stringify(results));
});
そして彼らはうまくいきます。ただし、現在、elasticsearch のステミング機能を有効にしようとしています。公式の ES ドキュメントのステミングの例を使用しましたが、mongoosastic では動作しません。私はもう試した
NodesModel.search({
"query_string": {
"query": "developed"
},
"index": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": ["standard", "lowercase", "my_stemmer"]
}
},
"filter": {
"my_stemmer": {
"type": "stemmer",
"name": "light_german"
}
}
}
}
}, function(err, results) {
console.log(err, JSON.stringify(results));
});
出力は次のとおりです。
{ [Error: SearchPhaseExecutionException[Failed to execute phase [query], all sha
rds failed; shardFailures {[zn4Omh8tRy-ml0K0lRpMig][nodess][0]: SearchParseExcep
tion[[nodess][0]: query[_all:developed],from[-1],size[-1]: Parse Failure [Failed
to parse source [{"query":{"query_string":{"query":"developed"},"index":{"analy
sis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","lo
wercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"light_
german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but go
t START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][1]: SearchParseExcep
tion[[nodess][1]: query[_all:developed],from[-1],size[-1]: Parse Failure [Failed
to parse source [{"query":{"query_string":{"query":"developed"},"index":{"analy
sis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","lo
wercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"light_
german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but go
t START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][2]: SearchParseExcep
tion[[nodess][2]: query[_all:developed],from[-1],size[-1]: Parse Failure [Failed
to parse source [{"query":{"query_string":{"query":"developed"},"index":{"analy
sis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","lo
wercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"light_
german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but go
t START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][3]: SearchParseExcep
tion[[nodess][3]: query[_all:developed],from[-1],size[-1]: Parse Failure [Failed
to parse source [{"query":{"query_string":{"query":"developed"},"index":{"analy
sis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","lo
wercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"light_
german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but go
t START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][4]: SearchParseExcep
tion[[nodess][4]: query[_all:developed],from[-1],size[-1]: Parse Failure [Failed
to parse source [{"query":{"query_string":{"query":"developed"},"index":{"analy
sis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","lo
wercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"light_
german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but go
t START_OBJECT "index"]; }]]
message: 'SearchPhaseExecutionException[Failed to execute phase [query], all s
hards failed; shardFailures {[zn4Omh8tRy-ml0K0lRpMig][nodess][0]: SearchParseExc
eption[[nodess][0]: query[_all:developed],from[-1],size[-1]: Parse Failure [Fail
ed to parse source [{"query":{"query_string":{"query":"developed"},"index":{"ana
lysis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","
lowercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"ligh
t_german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but
got START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][1]: SearchParseExc
eption[[nodess][1]: query[_all:developed],from[-1],size[-1]: Parse Failure [Fail
ed to parse source [{"query":{"query_string":{"query":"developed"},"index":{"ana
lysis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","
lowercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"ligh
t_german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but
got START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][2]: SearchParseExc
eption[[nodess][2]: query[_all:developed],from[-1],size[-1]: Parse Failure [Fail
ed to parse source [{"query":{"query_string":{"query":"developed"},"index":{"ana
lysis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","
lowercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"ligh
t_german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but
got START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][3]: SearchParseExc
eption[[nodess][3]: query[_all:developed],from[-1],size[-1]: Parse Failure [Fail
ed to parse source [{"query":{"query_string":{"query":"developed"},"index":{"ana
lysis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","
lowercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"ligh
t_german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but
got START_OBJECT "index"]; }{[zn4Omh8tRy-ml0K0lRpMig][nodess][4]: SearchParseExc
eption[[nodess][4]: query[_all:developed],from[-1],size[-1]: Parse Failure [Fail
ed to parse source [{"query":{"query_string":{"query":"developed"},"index":{"ana
lysis":{"analyzer":{"my_analyzer":{"tokenizer":"standard","filter":["standard","
lowercase","my_stemmer"]}},"filter":{"my_stemmer":{"type":"stemmer","name":"ligh
t_german"}}}}}}]]]; nested: ElasticsearchParseException[Expected field name but
got START_OBJECT "index"]; }]' } undefined
私が見るように、mongoosastic は次のように最初のパラメーターを ES nodejs クライアントに渡します。
schema.statics.search = function(query, options, cb){
if (arguments.length === 2) {
cb = arguments[1]
options = {}
}
options.hydrateOptions = options.hydrateOptions || defaultHydrateOptions || {};
if (query === null)
query = undefined
var model = this
, esQuery = {
body: {
query: query
},
index: options.index || indexName,
type: options.type || typeName
}
if (options.highlight) {
esQuery.body.highlight = options.highlight;
}
.......
私の質問は、ステミングを機能させるにはどうすればよいですか?