elasticsearch Elasticsearch相关性-具有相似名称的文档
我正在寻找一种方法来处理elasticsearch与文档名称的相关性,如“瓶子”和“瓶盖” 当有人寻找一个“瓶子”(搜索词),-“瓶盖”的得分应该低于“红色瓶子”elasticsearch Elasticsearch相关性-具有相似名称的文档,elasticsearch,search,search-engine,relevance,elasticsearch,Search,Search Engine,Relevance,我正在寻找一种方法来处理elasticsearch与文档名称的相关性,如“瓶子”和“瓶盖” 当有人寻找一个“瓶子”(搜索词),-“瓶盖”的得分应该低于“红色瓶子” 目前,我们的搜索引擎对“红色瓶子”的评分低于“500ml瓶子的瓶盖”如果不添加更多信息,您无法在Elasticsearch中解决这一问题。你想把“红色瓶子”排在“瓶盖”之上,因为你知道这些名字的语义信息——你知道“红色瓶子”意味着它谈论的东西是“瓶子”,而“瓶盖”意味着它谈论的东西是其他东西(与瓶子有关,但实际上不是瓶子)。如果你想从
目前,我们的搜索引擎对“红色瓶子”的评分低于“500ml瓶子的瓶盖”如果不添加更多信息,您无法在Elasticsearch中解决这一问题。你想把“红色瓶子”排在“瓶盖”之上,因为你知道这些名字的语义信息——你知道“红色瓶子”意味着它谈论的东西是“瓶子”,而“瓶盖”意味着它谈论的东西是其他东西(与瓶子有关,但实际上不是瓶子)。如果你想从Elasticsearch中排名来考虑这些信息,你必须对这些信息进行索引(可能会添加一个关键字标记字段,一个带有“瓶子”,另一个带有“瓶盖”——你必须进行实验,看看哪些字段适用于你的用例)。当然,这意味着一个人必须为每件事添加广告标签 然而,我怀疑你可以通过一些方法来改善这种情况。我的猜测是,你不太关心单个标题中的术语频率(“500ml瓶子的瓶盖”与瓶子无关,因为“瓶子”在标题中出现了两次——我认为术语频率对于这样的标题没有什么意义)。所以你可以这样做:
PUT /myindex
{
"settings": {
"index": {
"number_of_shards": 1
},
"analysis": {
"analyzer": {
"uniq_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"porter_stem",
"unique"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"type": "text",
"analyzer": "uniq_analyzer"
}
}
}
}
}
PUT /myindex/doc/1
{"name": "Red coloured bottles"}
PUT /myindex/doc/2
{"name": "Bottle caps for 500ml bottle"}
然后,如果你搜索瓶子,你会发现分数是一样的——不是完美的,而是一种进步。如果您想了解分数的来源,可以使用:
谢谢你,德肖克利。我不得不再次检查是否可以避免手动产品标签。我想知道,在eBay这样的大市场上,文档会被手动标记,在那里,更高的术语频率并不一定意味着更高的相关性。他们会让卖家对他们的产品进行正确分类吗?您当然可以尝试自动标记,但您可能希望从一些标记的培训数据开始。您还可以尝试一些NLP方法(进行词性标记,然后将任何分类为NNS的内容添加为标记——这在您的示例中会有所帮助,但我不确定它是否会影响其他地方)。我不知道ebay/amazon marketplace/等是否会自动添加标签,或者仅仅依靠卖家。如果我必须设计它,我可能会依赖卖家,但使用一种自动技术来标记可能被错误分类以供审查的项目。
POST /myindex
{
"explain": true,
"query": {
"match":
{"name": "bottle"}
}
}