0

两周前,我刚刚在我的项目中使用了 ElaticSearch(版本 2.4.1),如果我在查询字符串中指定字段,我会遇到问题。
我想使用 Kuromoji 插件和 n-gram 标记器来搜索日语数据。

在我的查询中,如果我没有指定字段(例如:“内容”),我会在结果中收到 2 条记录。

{
    "query" : {
        "bool" : {
            "must": {
                "query_string": {
                    "query":"Software"
                 /*,"fields":["Content"] <-- not specify this field*/
                }
            }
        }
    }
}

但是当我在上面的查询中使用“内容”字段时,结果没有记录。(在我的项目中,我想搜索“内容”字段。)

我也在步骤 1 中使用了属性“highlight”,但结果不包含“highlight”块

{...
    "highlight": {
        "pre_tags" : ["<tag1>"],
        "post_tags" : ["</tag1>"],
        "fields" : {
            "*" : {} /* or use "_all" */
        }
    }
}

我想问:在第2步(上面)中,查询字符串中指定了哪些字段?product.Content, 或者是其他东西?

如果我不使用 Kuromoji 插件,步骤 2 中的查询结果有 2 条记录。所以我认为 Kuromoji 插件与结果有关。有人可以帮我解决这个问题吗?

这是我在 yaml 中的映射和配置:

{...
    "mappings": {
        "product" : {
            "properties" : {
                "Content" : {
                    "index": "not_analyzed",
                    "search_analyzer": "ja",
                    "analyzer": "ja",
                    "type": "string",
                    "store": true
                } ...
            }
        }
    }
}

index :
 analysis :
  analyzer :
   ja :
    type : custom
    tokenizer : ja_tokenizer
    char_filter : [
     html_strip,
     kuromoji_iteration_mark
    ]
    filter : [
     lowercase,
     cjk_width,
     katakana_stemmer,
     kuromoji_part_of_speech
     ]
    ja_ngram :
     type : custom
     tokenizer : ngram_ja_tokenizer
     char_filter : [html_strip]
     filter : [
      cjk_width,
      lowercase
     ]
  tokenizer :
   ja_tokenizer :
    type : kuromoji_tokenizer
    mode : search
    user_dictionary : userdict_ja.txt
   ngram_ja_tokenizer :
    type : nGram
    min_gram : 2
    max_gram : 3
    token_chars : [letter, digit]
  filter :
   katakana_stemmer :
   type : kuromoji_stemmer
4

1 回答 1

0

我在映射中发现了问题。在我的映射中,我使用“Content”:{“index”:“not_analyzed”},因此它无法搜索“Content”字段。我更改为 {"index" : "analyzed"} 并解决了问题。

于 2016-11-01T10:04:34.843 回答