我们使用solr进行产品搜索。当使用solr时,我们需要处理“Is a”vs“Relates to”。例如,现在,如果我搜索“刀”,我会得到比我想要的刀磨刀更高,因为我们带有这么多实际的刀。鉴于这两种产品在名称上都有“刀”(比较'8'厨师刀'和'电动磨刀器')并且它们都存在于刀具类别中,我们目前的设置很难区分我们想要的厨师刀具在此搜索字词中得分较高。
我们有一种方法,当产品被分类并放在与另一类别相关的网站上时,它是与产品相关联的某种标签。因此,例如,砧板类别与刀具类别相关,但刀具类别在该情况下是“主”类别。在这种情况下,我们可以实现我们想要的差异化,但这需要在经销商端进行大量的劳动和管理。
我很好奇solr中是否有一个我不知道的功能可以解决这个问题,或者只是我们需要调整存储方式的问题。
这是一个8“厨师刀doc与电动磨刀器doc
的例子 8英寸刀:"productId": 9071,
"productName": "8\" Chinese Chef's Knife",
"text": [
"8\" Chinese Chef's Knife",
"Update International",
"KCC-8",
"Chinese Chef's Knives"
],
"productName_exact": "8\" Chinese Chef's Knife",
"manuf": "Update International",
"baseSku": "KCC-8",
"sku": [
"KCC-8"
],
"modelTypeDesc": "Chinese Chef's Knives",
"manufId": 74,
"categories": [
"Chef's Knives",
"Chinese Chef's Knives",
"Knife Sale"
],
"type": "Product",
"popularity": 4301,
"displayName": "Update International (KCC-8) - 8\" Chinese Chef's Knife",
电动磨刀器:
"productId": 3267,
"productName": "Edlund Electric Knife Sharpener",
"text": [
"Edlund Electric Knife Sharpener",
"Edlund",
"395",
"Electric Knife Sharpeners"
],
"productName_exact": "Edlund Electric Knife Sharpener",
"manuf": "Edlund",
"baseSku": "395",
"sku": [
"395"
],
"modelTypeDesc": "Electric Knife Sharpeners",
"manufId": 22,
"categories": [
"Electric Knife Sharpeners",
"Knife Sharpeners"
],
"type": "Product",
"popularity": 53,
"displayName": "Edlund (395) - Edlund Electric Knife Sharpener",
你会看到我想要使用的“受欢迎程度”字段,但问题是,鉴于该字段是基于某些东西的销售情况,有可能某件物品的配件可能比项目本身,但该术语仍应首先与项目本身匹配。
感谢您的帮助。
答案 0 :(得分:0)
所以我想为那些想知道的人找到一个很好的方法。我意识到我可以非常肯定地假设,如果一个人正在寻找一把刀,他的搜索词将以“刀”字结束。如果他正在寻找一把磨刀器,那么他的搜索术语将以“磨刀器”一词结束。
鉴于此,我能够创建一个仅对我们产品名称的最后一个单词编制索引的字段。所以在刀的情况下它只是“刀”。在磨刀器的情况下,它只是“锐化”。
然后我将该字段编入索引,然后使用比标准产品名称字段高得多的提升值来查询该字段。这里重要的是我打破了用户的搜索词,只使用了最后一个词。我使用了非常严格的关键字标记器和分析来确保它只在几乎精确的情况下匹配。它只有小写,hunspell和同义词过滤器。
这自动实现了我正在寻找的东西。唯一需要注意的是,如果您没有正确命名产品,它将不会显示在您期望的位置。一个很好的例子是“刀套”而不是“刀”。它们都是刀具,但在搜索刀具时不会显得那么高。但人们也可以说这是按预期工作的。