elasticsearch Elasticsearch相关性-具有相似名称的文档,elasticsearch,search,search-engine,relevance,elasticsearch,Search,Search Engine,Relevance" /> elasticsearch Elasticsearch相关性-具有相似名称的文档,elasticsearch,search,search-engine,relevance,elasticsearch,Search,Search Engine,Relevance" />

elasticsearch Elasticsearch相关性-具有相似名称的文档

elasticsearch Elasticsearch相关性-具有相似名称的文档,elasticsearch,search,search-engine,relevance,elasticsearch,Search,Search Engine,Relevance,我正在寻找一种方法来处理elasticsearch与文档名称的相关性,如“瓶子”和“瓶盖” 当有人寻找一个“瓶子”(搜索词),-“瓶盖”的得分应该低于“红色瓶子” 目前,我们的搜索引擎对“红色瓶子”的评分低于“500ml瓶子的瓶盖”如果不添加更多信息,您无法在Elasticsearch中解决这一问题。你想把“红色瓶子”排在“瓶盖”之上,因为你知道这些名字的语义信息——你知道“红色瓶子”意味着它谈论的东西是“瓶子”,而“瓶盖”意味着它谈论的东西是其他东西(与瓶子有关,但实际上不是瓶子)。如果你想从

我正在寻找一种方法来处理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"}
  }
}