我正在使用弹性搜索2.3 在删除所有停用词后,我已将所有移动产品存储在ES中(例如,使用,额外等)
“Micromax Canvas Doodle 4白色带8 GB内存和8gb内存”的示例架构:
"_source": {
"internal_mem": "8 GB",
"color": "White",
"brand": "Micromax",
"ram": "8 GB",
"model": "Canvas Doodle 4"
}
ES拥有数千个具有这些功能的移动名称。现在,我需要搜索这些产品。 对于搜索,我确实将所有产品分解为属性。因此,搜索“canvas doodle 4 gb”将是:
{
"query": {
"bool": {
"should": [{
"match": {
"model": {
"query": "canvas^4 doodle",
"boost": 2
}
}
}, {
"match": {
"internal_mem": {
"query": "4 GB",
"boost": 0.2
}
}
}]
}
}
}
我想要的结果:
我制定的规则:
的问题:
我应该使用此查询还是应该进行function_score查询(我还需要自定义分数)?
如何避免模型中“4”的搜索结果?例如“4”,“迷你”,“3g”,“4g” 我应该禁用IDF以避免这样的结果吗?
优先考虑模特/品牌的第一句话? (假设它们更重要,例如画布中的“画布”涂鸦3“)
不同属性的“提升”的推荐值?
对任何建议/改进持开放态度。请建议。
答案 0 :(得分:0)
请尝试以下查询。
{
"query": {
"filtered": {
"query": {
"bool": {
"should": [{
"multi_match": {
"query": "canvas doodle 4",
"fields": ["model"],
"operator": "and"
}
}, {
"multi_match": {
"query": "canvas doodle 4",
"fields": ["model"],
"type": "phrase_prefix"
}
}, {
"multi_match": {
"query": "canvas doodle 4",
"fields": ["model"],
"type": "phrase"
}
}]
}
}
}
}
这样可以检查 canvas , doodle 和 4 ,然后是短语前缀,然后是词组查询。