Fuzzy Like此弹性搜索中的查询未显示带撇号的字符串

时间:2014-09-10 05:17:16

标签: elasticsearch apostrophe fuzzy-search

我的fuzzy_like_this查询中有一个uissue 如果我的字符串包含任何撇号,那么它不会搜索这些值包含在db。

样品

citrus's =>搜索字符串 但结果没有选择撇号值而是变得像 柑橘,某某.. 请帮帮我 提前致谢

2 个答案:

答案 0 :(得分:2)

弹性搜索接受Apostrophe.so请仔细检查您的查询

答案 1 :(得分:1)

6个unicode字符可以代表文档中的“撇号”。它可以是u0027,u2018,u2019,u201B,u0091或u0092

在六个中,Elasticsearch将三个unicode字符识别为'撇号':u0027,u2018和u2019。

所以,我认为你的撇号必须是最后3个unicode字符,Elasticsearch将其视为单词边界。因此,柑橘只会被标记为柑橘。

在分析器中添加char_filter可能会对您有所帮助。所有六个字符都将被适当的'撇号'取代。

curl -XPUT http://localhost:9200/index_name(your_index) -d '
{
"settings": {
"analysis": {
  "char_filter": { 
    "mycharfilter": {
      "type": "mapping",
      "mappings": [ 
        "\\u0091=>\\u0027",
        "\\u0092=>\\u0027",
        "\\u2018=>\\u0027",
        "\\u2019=>\\u0027",
        "\\u201B=>\\u0027"
      ]
    }
  },
  "analyzer": {
    "quotes_analyzer": {
      "tokenizer":     "standard",
      "char_filter": [ "mycharfilter" ] 
    }
   }
  }
 }
}'