ElasticsearchMatchQueryが間違った結果を返しています

ヘマンス・アナバラプ

matchQueryJavaでElasticsearchをクエリするためにを使用しています。以下は私の質問です:

sourceBuilder.query(QueryBuilders.matchQuery("TransactionId_s","BulkRunTest.20Nov20201446.00"));

フィールドTransactionId_sはではありませんkeywordそして、matchQueryが指定した文字列と正確に一致し、結果を返すことを期待しています。ElasticsearchにTransactionId_sasのドキュメントはありませんBulkRunTest.20Nov20201446.00しかし、私はいくつかの結果を得ています、そしてそれらはTransactionId_s以下ようなものを持っています:

"TransactionId_s" : "BulkRunTest.17Sep20201222.00"
"TransactionId_s" : "BulkRunTest.22Sep20201450.00"
"TransactionId_s" : "BulkRunTest.20Sep20201250.00"

termQuery代わりにを使用しようとすると、matchQuery0の結果が得られます。これは、期待される結果です。matchQueryトークン化について心配することなく、指定された値の任意のフィールドにクエリを実行できると思いました私が間違っている?そして、私が見ている問題をどのように解決しますか?

どんな助けでも大歓迎です。ありがとうございました。

Elasticsearch忍者

Matchクエリが分析されます。つまり、インデックス作成時にフィールドで使用されているのと同じアナライザーが適用されます。API分析して、インデックス付きのトークンと検索語を確認できます

textデフォルトのアナライザー(標準)を持つフィールドがあることを考慮すると、検索語に対して以下のトークンが生成されますBulkRunTest.20Nov20201446.00

POST /_analyze
{
    "analyzer" : "standard",
    "text" : "BulkRunTest.20nov20201446.00"
}

そして生成されたトークン

{
    "tokens": [
        {
            "token": "bulkruntest", // notice this token
            "start_offset": 0,
            "end_offset": 11,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "20nov20201446.00",
            "start_offset": 12,
            "end_offset": 28,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

次に、一致ドキュメントの1つのトークンを確認しましょう BulkRunTest.17Sep20201222.00

POST /_analyze
{
    "analyzer" : "standard",
    "text" : "BulkRunTest.17Sep20201222.00"
}

そして生成されたトークン

{
    "tokens": [
        {
            "token": "bulkruntest", // notice same token 
            "start_offset": 0,
            "end_offset": 11,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "17sep20201222.00",
            "start_offset": 12,
            "end_offset": 28,
            "type": "<ALPHANUM>",
            "position": 1
        }
    ]
}

ご覧のとおりbulkruntest、インデックス付きの用語と検索用語の両方で同じトークンであるため、一致クエリは検索結果を返し、別のインデックス付きドキュメントでも同じです。

デフォルトの自動生成されたマッピングを.keyword使用し、サブフィールドがある場合は、その.keywordフィールドを使用して正確な検索を行うことができます

実例

{
  "query": {
    "term": {   // term query
      "TransactionId_s.keyword": {   // .keyword subfield is used
        "value": "BulkRunTest.20Nov20201446.00"
      }
    }
  }
}

そして検索結果

"hits": [
            {
                "_index": "test_in",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.6931471,
                "_source": {
                    "TransactionId_s": "BulkRunTest.20Nov20201446.00"
                }
            }
        ]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

分類Dev

カウントケースが間違った結果を返しています

分類Dev

Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

分類Dev

Pythonを使用したGoogleScrapeの結果の数が間違っています

分類Dev

中間結果を保存しないと、Eigenは間違った結果を返します

分類Dev

短いClojureコードは間違った結果を返します

分類Dev

File.isFileは()間違った結果を返しますか?

分類Dev

listviewonClickは間違った結果を返します

分類Dev

DATEのOracleSQL比較は間違った結果を返します

分類Dev

集計+平均は間違った結果を返します

分類Dev

MySQLでUtf-8を使用して選択すると、間違った結果が返されます

分類Dev

Wkwebviewcangobackが間違った結果を出している

分類Dev

Javascript Pretty PrintFormatが間違った結果を出している

分類Dev

AMPL IPOPTは、解決結果が「解決」されている間、間違った最適解を提供します

分類Dev

GETDATE()をSQL Serverに格納されているGETDATE()と比較した結果が間違っています

分類Dev

Python XMLfindallが間違ったものを返しています

分類Dev

MySQL関数が間違った値を返しています

分類Dev

difftimeが間違った数値を返しています

分類Dev

SelectmaxがMySQLで間違った値を返しています

分類Dev

間違った結果を返すSQL

分類Dev

React Typescript-Math.randomは、最小値と最大値が設定されていても間違った結果を返します

分類Dev

PythonのLinearRegressionが間違った結果を出しますか?

分類Dev

Numpyのfloat値のコンポーネントごとの比較が間違った結果を返しています

分類Dev

PHP ajaxAPIが間違った結果を返すことがあります

分類Dev

Hibernateは間違った結果セットを返し、間違ったクエリを生成します

分類Dev

AES New InstructionSetを使用した復号化の結果が間違っています

分類Dev

Cのプログラムが間違った結果を示しています、奇数

分類Dev

Cのプログラムが間違った結果を示しています、奇数

分類Dev

PHPのDateTimeの違いが間違った日数を返しています

Related 関連記事

  1. 1

    Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

  2. 2

    カウントケースが間違った結果を返しています

  3. 3

    Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

  4. 4

    Pythonを使用したGoogleScrapeの結果の数が間違っています

  5. 5

    中間結果を保存しないと、Eigenは間違った結果を返します

  6. 6

    短いClojureコードは間違った結果を返します

  7. 7

    File.isFileは()間違った結果を返しますか?

  8. 8

    listviewonClickは間違った結果を返します

  9. 9

    DATEのOracleSQL比較は間違った結果を返します

  10. 10

    集計+平均は間違った結果を返します

  11. 11

    MySQLでUtf-8を使用して選択すると、間違った結果が返されます

  12. 12

    Wkwebviewcangobackが間違った結果を出している

  13. 13

    Javascript Pretty PrintFormatが間違った結果を出している

  14. 14

    AMPL IPOPTは、解決結果が「解決」されている間、間違った最適解を提供します

  15. 15

    GETDATE()をSQL Serverに格納されているGETDATE()と比較した結果が間違っています

  16. 16

    Python XMLfindallが間違ったものを返しています

  17. 17

    MySQL関数が間違った値を返しています

  18. 18

    difftimeが間違った数値を返しています

  19. 19

    SelectmaxがMySQLで間違った値を返しています

  20. 20

    間違った結果を返すSQL

  21. 21

    React Typescript-Math.randomは、最小値と最大値が設定されていても間違った結果を返します

  22. 22

    PythonのLinearRegressionが間違った結果を出しますか?

  23. 23

    Numpyのfloat値のコンポーネントごとの比較が間違った結果を返しています

  24. 24

    PHP ajaxAPIが間違った結果を返すことがあります

  25. 25

    Hibernateは間違った結果セットを返し、間違ったクエリを生成します

  26. 26

    AES New InstructionSetを使用した復号化の結果が間違っています

  27. 27

    Cのプログラムが間違った結果を示しています、奇数

  28. 28

    Cのプログラムが間違った結果を示しています、奇数

  29. 29

    PHPのDateTimeの違いが間違った日数を返しています

ホットタグ

アーカイブ