不为失败找理由,要为成功找方法。

单个字匹配问题,想改Lucene的源代码

Elasticsearch | 作者 hezhiqiang | 发布于2021年11月18日 | 阅读数:906

是关于只匹配一个字的问题,比如,搜索“门萨”,门萨本身不是一个词,IK分词会拆为“门”和“萨”,我们希望搜索出来的结果中只有门和萨连在一起的才搜索出来,如果只是一个字不匹配,能帮忙问下好改吗?想改Lucene的源代码,如果可行,可以考虑有偿技术支持,微信:pipihzq,多谢。
已邀请:

caizhongao

赞同来自:

是需要完全匹配吗,如果是完全匹配,不分词就好了

caster_QL

赞同来自:

直接短语查询,这样门萨可以查出来,单有门和单有萨查不出来
POST test/_search
{
  "query": {
    "match_phrase": {
      "text": {
        "query": "门萨"
      }
    }
  }
}

yeziblo

赞同来自:

2楼是正确的,可以考虑使用短语匹配的方式来进行查询。

guoyanbiao520

赞同来自:

短语匹配加单字分词就可以

liujiacheng

赞同来自:

除了二楼的短语查询,还可以使用ik分词器,自定义词组“门萨”:
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "不知道门萨是不是个好地方"
}

PUT test_ik

POST test_ik/_mapping
{
  "properties":{
    "content":{
      "type": "text",
      "analyzer": "ik_smart"
    }
  }
}

POST test_ik/_doc/1
{
  "content":"不知道门萨是不是个好地方"
}

GET test_ik/_search
{
  "query": {
    "match": {
      "content": "门萨"
    }
  }
}
 
响应:
{
  "took" : 1049,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "test_ik",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "content" : "不知道门萨是不是个好地方"
        }
      }
    ]
  }
}
 

zmc - ES PAAS、JuiceFS

赞同来自:

IK改一下远程词库就好了,然后使用ik_smart做分词,这种匹配的逻辑只要想办法切词切成你想要的就OK了

要回复问题请先登录注册