Search 产品的弹性搜索映射
我想为我的在线购物网站实现一个搜索引擎Search 产品的弹性搜索映射,search,elasticsearch,search-engine,Search,elasticsearch,Search Engine,我想为我的在线购物网站实现一个搜索引擎我测试了一些分析器,但没有发现它们之间的显著差异。我使用了snowball、ngram和标准分析器 我不知道产品名称适合哪个analyzer,也不知道应该使用哪个搜索查询 这是我的映射模式 { "settings": { "analysis": { "analyzer": { "autocomplete": { "type": "custo
我测试了一些分析器,但没有发现它们之间的显著差异。我使用了snowball、ngram和标准分析器
我不知道产品名称适合哪个analyzer,也不知道应该使用哪个搜索查询
这是我的映射模式
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "standard",
"filter": ["standard", "lowercase", "stop", "kstem", "ngram"]
}
}
}
}
,
"mappings": {
"products": {
"properties": {
"id": {
"type": "integer",
"index": "no"
},
"name": {
"type": "multi_field",
"fields": {
"name": {
"type": "string"
},
"snowball": {
"type": "string",
"analyzer": "snowball"
},
"autocomplete": {
"analyzer": "autocomplete",
"type": "string"
}
}
}
}
}
}
和搜索查询,我不知道使用匹配查询是否适合我的用例
{
"query": {
"multi_match": {
"fuzziness":2,
"type" : "phrase",
"query": "term",
"fields": ["name", "name.snowball",
"name.autocomplete"]
}
}
}
使用查看在Lucene索引中为您使用的不同分析器生成了哪些标记。查询“term”不是一个很好的测试示例,请使用更长的东西
您的搜索要求是什么
不要使用多重匹配查询来测试结果,而是在单个搜索中测试分析器
curl -XGET 'http://localhost:9200/yourindex/_search?q=name:yourSearchTerm'
curl -XGET 'http://localhost:9200/yourindex/_search?q=name.snowball:yourSearchTerm'
curl -XGET 'http://localhost:9200/yourindex/_search?q=name.autocomplete:yourSearchTerm'
对于自动完成,请查看
此外,Snowball词干分析器非常具有攻击性,可能会产生不希望的结果,您可能希望使用较轻的词干分析器。我没有任何特殊要求,只是一个搜索引擎,用于索引所有产品名称,那么,您认为哪种分析器更好?您说我不使用匹配查询?那么您建议哪种查询适合我?要测试我说的查询,请不要使用多匹配查询,因为您希望看到搜索之间的任何差异。如果您没有任何特殊要求,只需使用标准分析器(默认),并根据需要进行构建。如果您需要搜索多个字段,或查看匹配查询,但我希望搜索引擎功能强大,请使用multi_match。对于搜索,您建议使用哪种查询?模糊、匹配、匹配+模糊,什么?如果不知道确切的用例和搜索功能,很难推荐一种查询类型。正如@DanTuffery所建议的,从标准分析器开始,在第一步中使用简单的匹配查询。然后慢慢改进你的搜索。