30

強調表示された各フラグメントの文字位置を取得することは可能ですか? 強調表示されたテキストを元のドキュメントに一致させる必要があり、文字位置があればそれが可能になります。

例えば:

curl "localhost:9200/twitter/tweet/_search?pretty=true" -d '{
    "query": {
        "query_string": {
            "query": "foo"
        }
    },
    "highlight": {
        "fields": {
            "message": {"number_of_fragments": 20}
        }
    }    
}'

このハイライトを返します:

"highlight" : {
    "message" : [ "some <em>foo</em> text" ]
 }

一致したドキュメントのフィールド メッセージが次の場合:

"Here is some foo text"

スニペットが char 8 で始まり、一致したフィールドの char 21 で終わることを知る方法はありますか?

一致したトークンの開始/終了オフセットを知ることは、私にとっても良いことです.script_fieldsを使用してその情報にアクセスする方法はありますか? (この質問はトークンを取得する方法を示していますが、オフセットは示していません)。

フィールド「メッセージ」には次のものがあります。

"term_vector" : "with_positions_offsets",
"index_options" : "positions" 
4

2 に答える 2

6

元のテキストを次のように拡張することになりました。

some[1] text[2] we[3] index[4]

次に、カスタム アナライザーを次のように定義します。

"char_filter": {
        "remove_tags": {
          "type": "pattern_replace",
          "pattern": "\\[[0-9]+\\]",
          "replacement": ""

強調表示されたスニペットで位置タグを取得し、テキスト内のどこに表示されるかがわかります。醜いが、うまくいく!

私はここでより完全な答えを出しました

于 2016-02-20T11:04:48.397 に答える