1

Elasticsearch を使用してフレーズ マッチングを実行しようとしています。

これが私が達成しようとしていることです:

data - 1: {
    "test" {
       "title" : "text1 text2"
    }
}

2: {
    "test" {
       "title" : "text3 text4"
    }
}

3: {
    "test" {
       "title" : "text5"
    }
}


4: {
    "test" {
       "title" : "text6"
    }
} 

検索ワード:

「text0 text1 text2 text3」を検索すると、#1 が返されます (完全な文字列に一致します)。

「text6 text5 text4 text3」を検索すると、#4、#3 が返されますが、#2 は同じ順序ではないため返されません。

これが私が試したことです:

  • index_analyzeras キーワードを設定し、search_analyzer標準として
  • カスタムトークンの作成も試みました

しかし、私の解決策では、ドキュメント内のキーワードに対する検索クエリから部分文字列の一致を検索することはできません。

誰かが同様のクエリを作成したことがある場合は、マッピングの構成方法と使用されたクエリの種類を提供できますか?

4

1 に答える 1

2

ここに表示されるのは次のとおりです。クエリから送信されたトークンに一致する検索が必要です。それらのトークンが一致する場合、それはタイトルと完全に一致する必要があります。

これは、タイトル フィールドをキーワードとしてインデックス化すると、必須の一致が得られることを意味します。{"text1 text2"}ただし、検索用の標準アナライザーは、インデックス トークンと検索トークンがあるため、タイトル スペースと一致することはありません[{"text1},{"text2"}]。ずさんな値でフレーズ一致を使用することはできません。そうしないと、トークンの順序要件が無視されます。

したがって、本当に必要なのはインデックス中にキーワード トークンを生成することですが、検索するたびにシングルを生成する必要があります。あなたの帯状疱疹は秩序を維持し、それらの1つが一致する場合は、それを検討してください. ユニグラムを出力しないように設定しますが、帯状疱疹がない場合はユニグラムを許可します。つまり、単語が 1 つしかない場合はそのトークンが出力されますが、検索単語をさまざまな数のシングル トークンに組み合わせることができる場合、単一の単語トークンは発行されません。

PUT
  { "settings":
    {
        "analysis": {
            "filter": {
                "my_shingle": {
                    "type": "shingle",
                    "max_shingle_size": 50,
                    "output_unigrams": false
                }
            },
            "analyzer": {
                "my_shingler": {
                    "filter": [
                        "lowercase",
                        "asciifolding",
                        "my_shingle"
                    ],
                    "type": "custom",
                    "tokenizer": "whitespace"
                }
            }
        }
    }
}

Then you just want to set your type mapping to use the keyword analyzer for index and the `my_shingler` analyzer for search.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-shingle-tokenfilter.html

于 2013-10-09T01:39:38.270 に答える