ローカル PC にセットアップしES
てインストールしChrome Sense
ました。現在、クエリでシノニムを機能させようとしていmulti_match
ますが、どこにも到達していません。これが、私が見ているものを再現するための Sense クエリです...
いくつかの単純な類義語と基本的なステミングなどを使用してテスト インデックスを作成する
POST /test
{
"settings" : {
"analysis" : {
"filter" : {
"synonym_expand" : {
"type" : "synonym",
"expand" : 1,
"synonyms" : [
"strawberry, apple, banana, grape, fruit",
"queen, king, monarch"
]
},
"english_stemmer" : {
"type" : "stemmer",
"language" : "english"
}
},
"analyzer" : {
"lens-english" : {
"type" : "custom",
"tokenizer" : "standard",
"filter" : [
"lowercase",
"stop",
"english_stemmer",
"synonym_expand"
]
}
}
}
},
"mappings" : {
"video" : {
"properties" : {
"Description" : {
"type" : "string",
"index_analyzer" : "lens-english",
"search_analyzer": "lens-english"
},
"Title" : {
"type" : "string",
"index_analyzer" : "lens-english",
"search_analyzer": "lens-english"
}
}
}
}
}
次に、2つのドキュメントを投稿します
POST /test/test
{
"Title" : "The diet plan",
"Description" : "Eat a lot of bananas and custard"
}
POST /test/test
{
"Title" : "The Queens visit",
"Description" : "this is the day that elizebeth when ape at her subjects for having a strawberry fight"
}
シノニムが展開されているかどうかをテストします
GET /test/_settings
そして私は彼らがそうしていることを見ます。
アナライザーにテスト フレーズを渡すと、すべての用語が抽出され、インデックスを作成する必要があることがわかります。
POST /test/_analyze?analyzer=lens-english
{Monarch fruit.}
そして彼らは...これまでのところ素晴らしいことをしています!
ここで、シノニム リストにある「fruit」を含むクエリを検索します。Strawberry
したがって、単語andを含む両方のドキュメントがbanana
一致するはずですよね?
GET /test/test/_search
{
"query": {
"multi_match": {
"query": "fruit",
"fuzziness":"AUTO",
"fields": [
"Title",
"Description"
]
}
},
"highlight": {
"fields": {
"Title":{},
"Description":{}
}
}
}
そして..何もヒットしません!
次のように、検索時に標準アナライザーを使用するようにマッピングセクションを変更してみました
"mappings" : {
"video" : {
"properties" : {
"Description" : {
"type" : "string",
"index_analyzer" : "lens-english",
"search_analyzer": "standard"
},
"Title" : {
"type" : "string",
"index_analyzer" : "lens-english",
"search_analyzer": "standard"
}
}
}
}
でも何もない、なだ!
ここで何が起こっているのかを見つけることができるElasticsearchの知識を持っている人はいますか?