0

私は Elasticsearch を初めて使用し、同義語を構成しようとしていますが、期待どおりに機能していません。

私の分野には次のデータがあります。 1) テクニカル リード、モジュール リード、ソフトウェア エンジニア、シニア ソフトウェア エンジニア

tl を検索すると、"Technical Lead" または "tl" が返されますが、リードはインデックス tme でトークン化されるため、"Technical Lead" と "Module Lead" が返されます。

正確な設定でこの問題を解決するのを手伝ってください。

インデックス時間と検索時間のトークン化を見たことがありますが、それを理解できません。

synonyms.txt:

tl,TL => テクニカル リード

se,SE => ソフトウェア エンジニア

sse => シニア ソフトウェア エンジニア

マッピング ファイル:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "synonym": {
            "tokenizer": "whitespace",
            "filter": [
              "synonym"
            ]
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms_path": "synonyms.txt"
          }
        }
      }
    }
  },
  "mappings": {
    "tweet": {
      "properties": {
        "Domain": {
          "type": "string",
          "analyzer": "synonym"
        },
        "Designation": {
          "analyzer": "synonym",
          "type": "string"
        },
        "City": {
          "type": "string",
          "analyzer": "synonym"
        }
      }
    }
  }
}
4

1 に答える 1

0

トークンはここでは同一であるため、その部分は省略しています。あなたがする必要があるのは、すべてではなく任意の単語に一致しているように見えるため、「または」ではなく「AND」一致を行っていることを確認することです。

トークンを確認してください:

localhost:9200/test/_analyze?analyzer=synonym&text=technical lead
localhost:9200/test/_analyze?analyzer=synonym&text=tl

そしてクエリ

{
   "query": {
      "match": {
         "domain": {
            "query": "tl",
            "operator": "and"
         }
      }
   }
}

通常、検索アナライザーとインデックス アナライザーを同じにする必要があります。ただし、これが望ましくない高度な例が多数あります。ただし、シノニムの場合、展開をオンにしているときに、どちらか一方にシノニムを使用したくないことがよくあります。つまり、tl、テクニカル リード

ただし、 => タイプの同義語を使用しているため、コンマ間のすべての単語に対して一連のトークンを作成するのではなく、すべての単語が右側の単語に変換されるため、これは実際には問題ではありません。

于 2013-10-10T15:15:47.510 に答える