我想为我的在线购物网站实施一个搜索引擎。我测试了一些分析仪,但我没有看到它们之间的显着差异。我用雪球,ngram,标准分析仪
我不知道哪个分析仪适合的产品名称并给我最好的结果,我也不知道我应该使用哪个搜索查询
这是我的映射架构
{
"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"]
}
}
}
答案 0 :(得分:0)
使用Analyze API查看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'
对于自动填充功能,请查看Completion Suggesster API。
此外,Snowball干扰器非常具有侵略性并且可能产生不良结果,您可能需要使用更轻的干扰器。