弹性搜索,查询字符串查询,中缀搜索不适用于连字符

时间:2015-09-16 08:43:42

标签: elasticsearch infix-notation hyphen

图例:

' is the quotation mark for the better reading of each string value.
(star) is *

字符串值如'Karlsruhe-Durlach','Karlsruhe','Karlsruhe)Südstadt'和'München'存储在弹性搜索中。

我的问题:

像'(star)ruhe-Durl(star)'这样的搜索字符串应该与存储的字符串匹配 '卡尔斯鲁厄-Durlach'。

我的想法是:

GET _search
{
    "query": {
        "query_string": {
          "query": "*ruhe-Durl*"
        }     
    }
}

=>没有结果

如果搜索字符串'“Karlsruhe-Durlach”:

GET _search
{
    "query": {
        "query_string": {
          "query": "\"Karlsruhe-Durlach\""
        }     
    }
}

=> “卡尔斯鲁厄 - 杜拉赫”将成为结果。

如果搜索字符串'(star)“rlsruhe-Durlac”(星号)“:

GET _search
{
    "query": {
        "query_string": {
          "query": "*\"rlsruhe-Durlac\"*",
          "default_field" : "city"
        }     
    }
}

=>将成为'Karlsruhe-Durlach','Karlsruhe','Karlsruhe)Südstadt'和'München'。

如果搜索字符串'(star)urlac(star)':

GET _search
{
    "query": {
        "query_string": {
          "query": "*urlac*"
        }     
    }
}

=> “卡尔斯鲁厄 - 杜拉赫”将成为结果。

索引创建如下:

{
  "settings":{
     "index":{
        "analysis":{
           "analyzer":{
              "german":{
                 "tokenizer":"keyword",
                 "filter":"standard"
              }
           }
        }
     }
  },
 "mappings":{
     "organization":{
        "properties":{
           "id":{
              "analyzer": "german",
              "index": "not_analyzed",
              "type":"string"
           }
        }
     }
  }
}

你能给我一个建议,应该如何编写带连字符的中缀搜索字符串?像'(star)ruhe-Durl(star)'这样的中缀搜索字符串应该只与'Karlsruhe-Durlach'匹配。中缀搜索字符串或创建索引时是否有错误?

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

您可以使用通配符查询: https://www.elastic.co/guide/en/elasticsearch/guide/current/_wildcard_and_regexp_queries.html

 {
       "query": { 
           "wildcard":{
              "id": "*rlsruhe-Durlac*"
            }
       }
    }

这将有助于您搜索中缀。