问题陈述
我们正在使用Product Advertising API的Item Search
操作,在此我们将产品从亚马逊索引到我们的Elasticsearch索引。
每当用户搜索任何产品时,都会对存储在我们索引中的文档进行搜索。
问题在于,根据我们的索引进行搜索时返回的产品相关性不大。
示例文档如下:
{
"product_url": "https://www.amazon.com/Posse-Comitatus-Unisex-Adult-One-Size/dp/B072BPW34V",
"title": "Thin RED Line USA flag Posse Comitatus Unisex Adult One-Size Cap Hat Black",
"product_group": "Apparel",
"description": "Thin RED Line USA flag Posse Comitatus Unisex Adult One-Size Cap Hat Black"
}
所有字段均为text
字段。
我们首先尝试使用如下汇总方法找到最合适的类别:
GET index_name/_search
{
"size": 0,
"query": {
"match": {
"title": {
"query": "search_term",
"minimum_should_match": "60%"
}
}
} ,
"aggs": {
"Group By Category": {
"terms": {
"field": "product_group.keyword",
"size": 2
}
}
}
}
假设它返回了Apparel
和Sports
,然后我们使用上述查询返回的类别,例如:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "Search Term",
"fields": [
"product_url^5",
"description^3",
"title^10"
],
"minimum_should_match": "60%"
}
}
],
"must": [
{
"bool": {
"should": [
{
"term": {
"product_group.keyword": {
"value": "Apparel"
}
}
},
{
"term": {
"product_group.keyword": {
"value": "Sports"
}
}
}
]
}
}
]
}
}
}
在某些情况下它可以工作,但是在某些意义上却失败,它仅在少数情况下会带来合适的类别。例如:搜索Home
时,它会带来Stephen King
个项目,而Books
是最相关的结果。
我的问题是:有什么方法可以通过Product Advertising API
或通过对ES索引本身进行一些更改来找到最合适的类别。