2012-11-04 67 views
0

时,如何引用多场我无法使用导航标记访问多场elasticsearch - 建立查询

我的映射:

{ 
"mappings":{ 
    "document":{ 
     "properties":{ 
      "tags":{ 
       "type":"object", 
       "properties":{ 
        "title":{ 
         "fields":{ 
          "partial":{ 
           "search_analyzer":"main", 
           "index_analyzer":"partial", 
           "type":"string" 
          }, 
          "title":{ 
           "type":"string", 
           "analyzer":"main" 
          }, 
          "title2":{ 
           "type":"string", 
           "analyzer":"main" 
          } 
         }, 
         "type":"multi_field" 
        } 
       } 
      } 
     } 
    } 
}, 

"settings":{ 
    "analysis":{ 
     "filter":{ 
      "name_ngrams":{ 
       "side":"front", 
       "max_gram":50, 
       "min_gram":2, 
       "type":"edgeNGram" 
      }, 
      "name_ngrams_back":{ 
       "side":"back", 
       "max_gram":50, 
       "min_gram":2, 
       "type":"edgeNGram" 
      }, 
      "name_middle_ngrams":{ 
       "type":"nGram", 
       "max_gram":50, 
       "min_gram":2 
      } 
     }, 

     "analyzer":{ 
      "main":{ 
       "filter": ["standard", "lowercase", "asciifolding"], 
       "type": "custom", 
       "tokenizer": "standard" 
      }, 
      "partial":{ 
       "filter":["standard","lowercase","asciifolding","name_ngrams"], 
       "type": "custom", 
       "tokenizer": "standard" 
      } 
     } 
    } 
} 

}

测试数据:

curl -XPUT localhost:9200/testindex/document/1 -d '{"title": "Fight for your life"}' 
curl -XPUT localhost:9200/testindex/document/2 -d '{"title": "Fighting for your life"}' 
curl -XPUT localhost:9200/testindex/document/3 -d '{"title": "Will you just start the fight"}' 

搜索:

curl -XGET 'localhost:9200/testindex/document/_search?q=title:life&pretty=1'     // Ok 
curl -XGET 'localhost:9200/testindex/document/_search?q=document.title:life&pretty=1'  // Ok 

// Return 0 hits. I expect this to return same result as the above queries. 
curl -XGET 'localhost:9200/testindex/document/_search?q=title.title2:life&pretty=1' 
curl -XGET 'localhost:9200/testindex/document/_search? q=document.title.title2:life&pretty=1' 

如何在构建查询时引用多个字段?

回答

1

您已经为tags.title字段定义了多字段映射,但您正在索引和搜索title字段。试试这个测试数据:

curl -XPUT localhost:9200/testindex/document/1 -d '{"tags":{"title": "Fight for your life"}}' 
curl -XPUT localhost:9200/testindex/document/2 -d '{"tags":{"title": "Fighting for your life"}}' 
curl -XPUT localhost:9200/testindex/document/3 -d '{"tags":{"title": "Will you just start the fight"}}' 

用以下搜索:

curl -XGET 'localhost:9200/testindex/document/_search?q=title:life&pretty=1' 
curl -XGET 'localhost:9200/testindex/document/_search?q=tags.title:life&pretty=1' 
curl -XGET 'localhost:9200/testindex/document/_search?q=document.tags.title:life&pretty=1' 

curl -XGET 'localhost:9200/testindex/document/_search?q=title2:life&pretty=1' 
curl -XGET 'localhost:9200/testindex/document/_search?q=tags.title.title2:life&pretty=1' 
curl -XGET 'localhost:9200/testindex/document/_search?q=document.tags.title.title2:life&pretty=1' 
+0

谢谢* 2; – Kennedy