首次尝试使用带有nodejs的aws托管服务实现弹性搜索。提到官方文档并想出了这个:
//1. create index
client.indices.create({ index: 'products' });
//2. mapping
client.indices.putMapping({
index: 'products',
type: 'products',
body: {
properties: {
'product_name': {
'type': 'string',
"analyzer": "english"
},
'product_description': {
'type': 'string',
"analyzer": "english"
}
}
}
});
//3. import documents..
product_name: Testing
//4. search
client.search({
index: 'products',
type: 'products',
q: keywords,
analyzer: 'english',
size: 10
});
现在,如果我搜索“测试”或“令牌测试”,则会返回1个结果。但是,如果我测试传递'Test'或'Tist'作为关键字,那么分析仪似乎没有提升,我没有得到任何结果。
更新:根据@Val回答添加了分析器:'english',但仍然没有'Test'或'Tist'的结果。
答案 0 :(得分:0)
这是因为在使用%
参数时,会进行q
查询,输入字符串的默认分析器是query_string
分析器。
你有两个选择:
一个。在查询字符串中包含字段名称:
standard
B中。指定client.search({
index: 'products',
type: 'products',
q: 'product_name:' + keywords, <--- modify this
size: 10
});
作为查询时间分析器,以生成与先前编制索引相同的标记:
english