首页 文章

Elasticsearch低模糊评分

提问于
浏览
0

我有一个大约300,000个名称和地址的数据库 . 有很多名称拼写略有不同但地址相同 . 我一直试图将这些名字组合在一起 . 这是我的数据样本 .

POST /_bulk
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SREE SAI MAHILA PODUPU SANGHAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SREE ANJANEYA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SREE BANGARAMMA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SREE SAI MAHILA PODUPU SANGHAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI SAI MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI BANGARAMMA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI ANJANEYA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI RAMA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI PYDITHALLAMMA MAHIALA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI RAMA MAHILA PODUPU SANGHAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI PYDIMAMBA MAHILA PODUPU SANGAM KANNAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }
{ "index":  { "_index": "test", "_type": "test" }}
{ "name":"SRI PYDITHALAMMA MAHILA PODUPU SANGAM", "address":"KSR PURAM", "city":"VIZIANAGARAM" }

当我尝试模糊匹配一个名字时,我得到一个非常低的匹配分数 . 这是我正在使用的查询示例:

GET test/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": {
              "query": "SREE BANGARAMMA MAHILA PODUPU SANGAM",
              "fuzziness": 2,
              "operator": "and"            

            }
          }
        }
      ]
    }
  }
}

当我查询这个小样本集时,对于 SREE BANGARAMMA MAHILA PODUPU SANGAM ,我得到一个 max_score1.1982819 和模糊匹配文档: SRI BANGARAMMA MAHILA PODUPU SANGAMscore0.2869133 . 这标志着 23% 匹配 . 他们的第一句话有一点点差异: SRI vs SREE .

SRISREE 在我的数据集中显示了很多 . 这些可以等同于 Sir 这样的 Headers . 在我的数据集中,查询的最后一部分 MAHILA PODUPU SANGAM 也会重复出现 . 字符串中唯一唯一的实体是 BANGARAMMA . 术语频率/反向文档频率是否会导致结果偏差?

当我查询这个小样本集时,我确实得到了我想要的结果 . 但是当我在我的主要300,000数据集上运行相同的查询时,我只返回与文档100%匹配的结果,并且模糊匹配不会显示 .

我已经尝试使用 boost ,但这似乎没有产生我想要的结果 .

我想知道这个问题是否是因为低模糊匹配得分 . 如果样本集中仅12个数据点的模糊匹配得分如此之低,则与300,000相比,它可能得分要低得多 . 我想知道当我查询主数据集时,如何显示模糊匹配 . 坦率地说,我不知道问题似乎是什么 . 有人能指出我正确的方向 .

样本集的结果如下所示:

"hits": {
    "total": 2,
    "max_score": 1.1982819,
    "hits": [
      {
        "_index": "test",
        "_type": "test",
        "_id": "AViGh5xU276qVT8pqAHz",
        "_score": 1.1982819,
        "_source": {
          "name": "SREE BANGARAMMA MAHILA PODUPU SANGAM",
          "address": "KSR PURAM",
          "city": "VIZIANAGARAM"
        }
      },
      {
        "_index": "test",
        "_type": "test",
        "_id": "AViGh5xU276qVT8pqAH2",
        "_score": 0.2869133,
        "_source": {
          "name": "SRI BANGARAMMA MAHILA PODUPU SANGAM",
          "address": "KSR PURAM",
          "city": "VIZIANAGARAM"
        }
      }
    ]
  }

2 回答

  • 2

    我不会依赖tf-idf和模糊查询来做你需要的 . 模糊查询最大编辑距离为2.因此,“sri”可能匹配“sree”,但不匹配“shree” .

    阅读SimHash算法(字符串的局部敏感哈希函数::意味着类似的字符串具有彼此接近的哈希值) .

    如果在索引之前使用名称的SimHash向源数据添加另一个字段,则可以使用该值来约束为给定地址返回的“类似名称”的范围 .

    您可能仍需要执行一些手动重复数据删除工作以使列表稳固,但至少SimHashing名称将使此过程不那么痛苦(例如,按地址排序,然后按名称哈希) .

    你也可以决定只使用一个停用词过滤器从搜索索引中删除像“sri”这样的敬语(如果它在你的收藏中发生了1000次,它是否真的帮助你找到人?或者是否有人单独搜索“sri”?)

    我还建议使用一个共同的次大陆昵称/名称变体列表(如果你能找到一个)作为标准化的同义词列表(例如Hari,Hariram => Hari)*

    *如果您找到/创建此列表,请分享!很多项目需要这个!

  • 1

    请尝试以下查询

    {
              "query": {
                "multi_match": {
                          "query": "SREE BANGARAMMA MAHILA PODUPU SANGAM",
                    'fuzziness': 2,
                    'prefix_length': 1
                }
              }
            }
    

相关问题