0

我已经通过这个 JSON 创建了我的索引和映射

// 1st Mapping
    http://localhost:9200/hdm/entities/_mapping
    {
            "entities" : {
                "properties": {
                    "name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
                    "description": { "type": "string", "analyzer": "nGram" }
                }
            }
        }
// 2nd Mapping
    http://localhost:9200/hdm/products/_mapping
    {
        "products": {
            "_parent": { "type": "entities" },
            "properties": {
                "name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
                "code": { "type": "string", "analyzer": "snowball" },
                "segment": { "type": "string", "analyzer": "snowball" },
                "description": { "type": "string", "analyzer": "snowball" }
            }
        }
    }

现在我已经使用 JSON 在这个索引中索引了一些文档

    http://localhost:9200/hdm/entities/100
    {
        "name":"Entity 001",
        "description":"this is the company or an organization which provides the whole medicine, tablets injunction for the problem of human being those noting worth gaining was ever gained without effort

",
        "itype":"entities"
    }

    http://localhost:9200/hdm/products/101?parent=100
    {
        "name":"biorich",
        "description":"the tablet para is used to rectify the person from the all types of pain in the body, kingston , car, bat, ball, description of the products",
        "code":"COD19202",  
        "segment":"SEG1022",
        "itype":"products"
    }

对于搜索,我使用了这个 JSON

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "has_child": {
                "type": "products",
                "query": {
                  "query_string": {
                    "query": "tab"
                  }
                }
              }
            },
            {
              "query_string": {
                "query": "tablet"
              }
            }
          ]
        }
      },
      "filter": {
        "or": [
          {
            "term": {
              "itype": "entities"
            }
          }
        ]
      }
    }
  }
}

我没有得到结果,但是我像这样更改了查询字符串,然后我得到了结果

      "query_string": {
        "default_field" : "description"
        "query": "tablet"
      }

您能否确认一下,我们是否应该在查询字符串中提及 default_field 以获取 nGram 分析器结果?我的分析仪配置如下

index.analysis.analyzer.mynGram.type: custom
index.analysis.analyzer.mynGram.tokenizer: standard
index.analysis.analyzer.mynGram.filter: [lowercase, mynGramFilter]
index.analysis.filter.mynGramFilter.type: nGram
index.analysis.filter.mynGramFilter.min_gram: 1
index.analysis.filter.mynGramFilter.max_gram: 10
4

1 回答 1

2

"default_field"查询中未指定时,elasticsearch 使用特殊_all字段执行搜索。由于您没有更改默认分析器,也没有为_all映射中的字段指定分析器,因此_all使用标准分析器执行针对该字段的搜索。

于 2012-05-10T01:44:51.287 回答