ElasticSearch不返回word前缀或后缀为点或#的文档



搜索查询,用于搜索具有给定技能的文档。


     GET resume_index/_search
        {
           "query": {
              "bool" : {
            "must" : [ {
              "ids" : {
                "types" : [],
                "values" : [ "176", "177", "178", "179", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", "220", "221", "222", "223", "224", "225", "226", "227", "228" ]
              }
            }, {
              "bool" : {
                "should" : [ {
                  "match" : {
                    "skills" : {
                      "query" : "c#",
                      "type" : "phrase",
                      "analyzer" : "synonym"

                    }
                  }
                }, {
                  "match" : {
                    "skills" : {
                      "query" : "asp.net",
                      "type" : "phrase",
                      "analyzer" : "synonym"
                    }
                  }
                } ],
                "minimum_should_match" : "1"
              }
            }, {
              "match" : {
                "skills" : {
                  "query" : "c#",
                  "type" : "phrase",
                   "analyzer" : "synonym"

                }
              }
            } ]
          }
           }
        }

当我用java等其他技能代替c#时,结果就来了。但是,如果在搜索查询中提到c#或。net,即使这些技能已经被索引,结果也是空白的。


  {
       "took": 11,
       "timed_out": false,
       "_shards": {
          "total": 5,
          "successful": 5,
          "failed": 0
       },
       "hits": {
          "total": 3,
          "max_score": 0.40027505,
          "hits": [
             {
                "_index": "resume_index",
                "_type": "phrase",
                "_id": "198",
                "_score": 0.40027505,
                "_source": {
                   "content": "",
                   "skills": [
                      "10g",
                      "c++",
                      "crystal report",
                      "ms-access",
                      "real estate",
                      "ui",
                      ".net",
                      "ado",
                      "c#",
                      "database",
                      "java",
                      "mvc",
                      "oracle 10g",
                      "order management",
                      "software development life cycle",
                      "system development",
                      "technica",
                      "vb",
                      "web technologies",
                      "windows xp",
                      "wpf",
                      "c",
                      "client management",
                      "development and maintenance",
                      "development life cycle",
                      "html",
                      "jquery",
                      "mysql",
                      "oracle",
                      "r",
                      "software development",
                      "ssrs",
                      "testing",
                      "unit testing",
                      "wcf",
                      "web applications",
                      "asp.net",
                      "asp.net mvc",
                      "c programming",
                      "deployment",
                      "management",
                      "project",
                      "sales",
                      "windows",
                      "adobe photoshop",
                      "developing",
                      "java script",
                      "reports",
                      "script",
                      "silverlight",
                      "software development life cycle (sdlc)",
                      "sql",
                      "sql server"
                   ]
                }
             },
             {
                "_index": "resume_index",
                "_type": "phrase",
                "_id": "199",
                "_score": 0.3792688,
                "_source": {
                   "content": "",
                   "skills": [
                      "application maintenance",
                      "client-server",
                      "cms",
                      "design",
                      "dos",
                      "e-commerce",
                      "erp",
                      "features",
                      "finance",
                      "knockout.js",
                      "mongodb",
                      "post-implementation",
                      "stocks",
                      ".net",
                      "ado",
                      "application development",
                      "c#",
                      "debugging",
                      "documentation",
                      "insurance",
                      "integration",
                      "java",
                      "mvc",
                      "planning",
                      "software development life cycle",
                      "svn",
                      "technica",
                      "agile",
                      "android",
                      "architecture",
                      "automation testing",
                      "client management",
                      "coordination",
                      "development life cycle",
                      "functional specification",
                      "healthcare",
                      "html",
                      "iis",
                      "jquery",
                      "networking",
                      "requirement gathering",
                      "software development",
                      "testing",
                      "tfs",
                      "triaging",
                      "troubleshooting",
                      "visual source safe",
                      "wcf",
                      "xcode",
                      "xml",
                      "asp.net",
                      "channel",
                      "css",
                      "entity framework",
                      "implementation and testing",
                      "maintenance support",
                      "management",
                      "mobile application",
                      "oracle forms",
                      "project",
                      "sales",
                      "sdlc",
                      "technical support",
                      "windows",
                      "ajax",
                      "analytics",
                      "client interaction",
                      "code management tool",
                      "crm",
                      "customer",
                      "excellent communication",
                      "ipad",
                      "java script",
                      "linq",
                      "market",
                      "ms dos",
                      "reporting"
                   ]
                }
             },
             {
                "_index": "resume_index",
                "_type": "phrase",
                "_id": "208",
                "_score": 0.3556832,
                "_source": {
                   "content": "",
                   "skills": [
                      "c++",
                      "control system",
                      "design",
                      "features",
                      "real estate",
                      ".net",
                      "ado",
                      "c#",
                      "database",
                      "integration",
                      "java",
                      "mvc",
                      "rdlc",
                      "stored procedures",
                      "technica",
                      "test case",
                      "agile",
                      "architecture",
                      "automation testing",
                      "banking",
                      "c",
                      "debug",
                      "design patterns",
                      "excel",
                      "iis",
                      "jquery",
                      "object oriented programming",
                      "r",
                      "security",
                      "software development",
                      "t-sql",
                      "testing",
                      "unit testing",
                      "wcf",
                      "web applications",
                      "xml",
                      "asp.net",
                      "c programming",
                      "css",
                      "development methodologies",
                      "entity framework",
                      "management",
                      "project",
                      "rdlc reports",
                      "sales",
                      "triggers",
                      "windows",
                      "ajax",
                      "coding",
                      "customs",
                      "dbms",
                      "developing",
                      "java script",
                      "javascript",
                      "linq",
                      "reporting",
                      "reports",
                      "schemas",
                      "script",
                      "software engineering",
                      "sql",
                      "sql server",
                      "telerik",
                      "test case design",
                      "visual studio",
                      "web service",
                      "webform",
                      "webforms"
                   ]
                }
             }
          ]
       }
    }

内容部分已被删除,因为允许的最大字符。你可以看到c#在document中被索引了,但是仍然不能得到结果。


Query Analysis Looks ok to me.    
 {
       "valid": true,
       "_shards": {
          "total": 1,
          "successful": 1,
          "failed": 0
       },
       "explanations": [
        {
             "index": "resume_index",
             "valid": true,
             "explanation": "+ConstantScore(_uid:txt#176 _uid:txt#177    _uid:txt#178  _uid:txt#179 _uid:txt#180 _uid:txt#181 _uid:txt#182 _uid:txt#183  _uid:txt#184 _uid:txt#185 _uid:txt#186 _uid:txt#187 _uid:txt#188 _uid:txt#189 _uid:txt#190 _uid:txt#191 _uid:txt#192 _uid:txt#193 _uid:txt#194 _uid:txt#195 _uid:txt#196 _uid:txt#197 _uid:txt#198 _uid:txt#199 _uid:txt#200 _uid:txt#201 _uid:txt#202 _uid:txt#203 _uid:txt#204 _uid:txt#205 _uid:txt#206 _uid:txt#207 _uid:txt#208 _uid:txt#209 _uid:txt#210 _uid:txt#211 _uid:txt#212 _uid:txt#213 _uid:txt#214 _uid:txt#215 _uid:txt#216 _uid:txt#217 _uid:txt#218 _uid:txt#219 _uid:txt#220 _uid:txt#221 _uid:txt#222 _uid:txt#223 _uid:txt#224 _uid:txt#225 _uid:txt#226 _uid:txt#227 _uid:txt#228) +((skills:asp.net skills:c#)~1) +skills:c#"
          }
       ]
    }

我可以看到查询正在正确形成。是什么,我错过了这是导致这个问题。我正在使用空白标记器

我可以看到查询时分析似乎工作正确,但是如何在索引时进行分析呢?默认的标准标记器对#.进行标记,这会导致c#查询不匹配,如下所示:

curl -XGET http://192.168.12.5:9200/tmdb/_analyze?analyzer=standard -d 'c#'
{
     "tokens":[
         {"token":"c",
          "start_offset":1,
           "end_offset":2,
           "type":"<ALPHANUM>",
           "position":1
 }]}

您可以切换到只对空白进行标记的简单分析器。您还可以使用映射字符过滤器来映射c# => csharp