我们在elasticsearch中有一个域名索引(我们使用ruby连接和维护这个轮胎宝石),但是我们在精确搜索时遇到了麻烦。elasticsearch与破折号完全匹配
如果我在域中搜索术语google.com,它会带回google.com,但它还会带回任何带有破折号( - )的域,例如in-google.com,research会让我相信 - 是ES中的通配符,我需要做的就是不分析,但不起作用。
:domain => { :type => 'string' , :analyzer => 'whitespace' },
:domain_2 => { :type => 'string' , :analyzer => 'pattern' },
:domain_3 => { :type => 'string', :index => 'not_analyzed' },
:domain_4 => { :type => 'string', :analyzer => 'snowball' }
我已经尝试了不同的分析仪,你可以在上面看到,但使用“头”插件搜索时,他们都具有相同的问题。
https://gist.github.com/anonymous/8080839是我用来生成数据集来测试的代码,我在寻找的是能够搜索JUST谷歌,如果我想*谷歌我可以实现我自己的通配符?
我辞职的事实,我将不得不删除并重新生成我的索引,但无论我选择什么样的分析或类型,我仍然不能得到一个确切的匹配
亚历您好,感谢回答,我有点不确定我理解你的榜样,我设置了如你所建议的multi_field方法(谢谢),但我仍然有问题搜索确切的域,你给的两个例子查询仍然显示in-google.com,即使搜索查询只是谷歌。 –
对不起,我忘记了在输出中丢失的注释。如果你看这个剧本,应该对他们为什么被收录进行评论。最后一个查询只匹配in-google.com。我已经更新了答案,以包含更多澄清的评论。希望这有助于:) –
我开始了解这一点(和播放)多一点,https://www.found.no/play/gist/dd354aad8703837877cf这是我目前的工作正在进行中多一点的数据,作为你可以看到我有精确的匹配运行良好,但现在是通配符搜索,如果我想搜索谷歌*,在谷歌中仍然会像megoogle一样出现。 –