当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch不返回单数/复数匹配

如何解决《Elasticsearch不返回单数/复数匹配》经验,为你挑选了3个好方法。

我正在使用一个弹性搜索的php库来索引和查找我的网站中的文档.这是创建索引的代码:

curl -XPUT 'http://localhost:9200/test/' -d '
{
  "index": {
    "numberOfShards": 1,
    "numberOfReplicas": 1
  }
}'

然后我使用curl XPUT将文档添加到索引和XGET以查询索引.这种方法很有效,除了在返回结果时单个和多个查询词在索引中不匹配的事实.例如,当我搜索"讨论"时,不会返回"讨论"的匹配,反之亦然.为什么会这样?我认为默认情况下,弹性搜索会对此进行处理.有什么我们必须明确提及它匹配单数/复数形式?



1> imotov..:

默认的elascticsearch分析器不会产生干扰,这就是你需要处理复数/单数.您可以尝试将Snowball Analyzer用于文本字段,以查看它是否更适合您的用例:

curl -XPUT 'http://localhost:9200/test' -d '{
    "settings" : {
        "index" : {
            "number_of_shards" : 1,
            "number_of_replicas" : 1
        }
    },
    "mappings" : {
        "page" : {
            "properties" : {
                "mytextfield": { "type": "string",  "analyzer": "snowball", "store": "yes"}
            }
        }
    }
}'



2> Ninja..:

不知怎的雪球对我不起作用......我得到的错误就像我在评论中提到的@ imotov的答案.我使用了搬运工干,它对我来说很有效.这是我使用的配置:

curl -XPUT localhost:9200/index_name -d '
{
"settings" : {
    "analysis" : {
        "analyzer" : {
            "stem" : {
                "tokenizer" : "standard",
                "filter" : ["standard", "lowercase", "stop", "porter_stem"]
            }
        }
    }
},
"mappings" : {
    "index_type_1" : {
        "dynamic" : true,
        "properties" : {
            "field1" : {
                "type" : "string",
                "analyzer" : "stem"
            },
            "field2" : {
                "type" : "string",
                "analyzer" : "stem"
            }
         }
      }
   }
}'



3> Himadri Pant..:

由于'porterStem'过滤器过于敏感,因此如果您使用'minimal_english'过滤器则更适合.'porterStem'为单词创建类似的标记,例如:

搜索'测试'将导致'测试','测试','测试','测试'等.人.

但'minimal_english'只会产生 - '测试'和'测试'.


你的答案没有标记正确,因为它比第一个要晚得多,但这显然是一个更好的解决方案.雪球分析仪是非常不准确的.porterStem好一点,可能有用.kstem甚至不那么敏感,而minimal_english是最不敏感的.但是雪球太可怕了.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有