ランク特徴フィールドタイプ

rank_features フィールドは数値特徴ベクトルをインデックス化できるため、後で rank_feature クエリを使用してドキュメントをブーストするために使用できます。

これは rank_feature データ型に類似していますが、特徴のリストがスパースな場合により適しています。そのため、各特徴に対してマッピングにフィールドを追加することは合理的ではありません。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "topics": {
  6. "type": "rank_features"
  7. },
  8. "negative_reviews": {
  9. "type": "rank_features",
  10. "positive_score_impact": False
  11. }
  12. }
  13. },
  14. )
  15. print(resp)
  16. resp1 = client.index(
  17. index="my-index-000001",
  18. id="1",
  19. document={
  20. "topics": {
  21. "politics": 20,
  22. "economics": 50.8
  23. },
  24. "negative_reviews": {
  25. "1star": 10,
  26. "2star": 100
  27. }
  28. },
  29. )
  30. print(resp1)
  31. resp2 = client.index(
  32. index="my-index-000001",
  33. id="2",
  34. document={
  35. "topics": {
  36. "politics": 5.2,
  37. "sports": 80.1
  38. },
  39. "negative_reviews": {
  40. "1star": 1,
  41. "2star": 10
  42. }
  43. },
  44. )
  45. print(resp2)
  46. resp3 = client.search(
  47. index="my-index-000001",
  48. query={
  49. "rank_feature": {
  50. "field": "topics.politics"
  51. }
  52. },
  53. )
  54. print(resp3)
  55. resp4 = client.search(
  56. index="my-index-000001",
  57. query={
  58. "rank_feature": {
  59. "field": "negative_reviews.1star"
  60. }
  61. },
  62. )
  63. print(resp4)
  64. resp5 = client.search(
  65. index="my-index-000001",
  66. query={
  67. "term": {
  68. "topics": "economics"
  69. }
  70. },
  71. )
  72. print(resp5)

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. topics: {
  6. type: "rank_features",
  7. },
  8. negative_reviews: {
  9. type: "rank_features",
  10. positive_score_impact: false,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);
  16. const response1 = await client.index({
  17. index: "my-index-000001",
  18. id: 1,
  19. document: {
  20. topics: {
  21. politics: 20,
  22. economics: 50.8,
  23. },
  24. negative_reviews: {
  25. "1star": 10,
  26. "2star": 100,
  27. },
  28. },
  29. });
  30. console.log(response1);
  31. const response2 = await client.index({
  32. index: "my-index-000001",
  33. id: 2,
  34. document: {
  35. topics: {
  36. politics: 5.2,
  37. sports: 80.1,
  38. },
  39. negative_reviews: {
  40. "1star": 1,
  41. "2star": 10,
  42. },
  43. },
  44. });
  45. console.log(response2);
  46. const response3 = await client.search({
  47. index: "my-index-000001",
  48. query: {
  49. rank_feature: {
  50. field: "topics.politics",
  51. },
  52. },
  53. });
  54. console.log(response3);
  55. const response4 = await client.search({
  56. index: "my-index-000001",
  57. query: {
  58. rank_feature: {
  59. field: "negative_reviews.1star",
  60. },
  61. },
  62. });
  63. console.log(response4);
  64. const response5 = await client.search({
  65. index: "my-index-000001",
  66. query: {
  67. term: {
  68. topics: "economics",
  69. },
  70. },
  71. });
  72. console.log(response5);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "topics": {
  6. "type": "rank_features"
  7. },
  8. "negative_reviews" : {
  9. "type": "rank_features",
  10. "positive_score_impact": false
  11. }
  12. }
  13. }
  14. }
  15. PUT my-index-000001/_doc/1
  16. {
  17. "topics": {
  18. "politics": 20,
  19. "economics": 50.8
  20. },
  21. "negative_reviews": {
  22. "1star": 10,
  23. "2star": 100
  24. }
  25. }
  26. PUT my-index-000001/_doc/2
  27. {
  28. "topics": {
  29. "politics": 5.2,
  30. "sports": 80.1
  31. },
  32. "negative_reviews": {
  33. "1star": 1,
  34. "2star": 10
  35. }
  36. }
  37. GET my-index-000001/_search
  38. {
  39. "query": {
  40. "rank_feature": {
  41. "field": "topics.politics"
  42. }
  43. }
  44. }
  45. GET my-index-000001/_search
  46. {
  47. "query": {
  48. "rank_feature": {
  49. "field": "negative_reviews.1star"
  50. }
  51. }
  52. }
  53. GET my-index-000001/_search
  54. {
  55. "query": {
  56. "term": {
  57. "topics": "economics"
  58. }
  59. }
  60. }
ランク特徴フィールドは rank_features フィールドタイプを使用する必要があります
スコアと負の相関を持つランク特徴は宣言する必要があります
ランク特徴フィールドは文字列キーと厳密に正の数値値を持つハッシュでなければなりません
このクエリは “政治” トピックに関するドキュメントをランク付けします。
このクエリは “1スター” レビューの数に逆比例してドキュメントをランク付けします。
このクエリは “トピック” フィールドに “経済” 特徴を格納しているドキュメントを返します。

rank_features フィールドは単一値の特徴と厳密に正の値のみをサポートします。多値フィールドおよびゼロまたは負の値は拒否されます。

rank_features フィールドはソートや集計をサポートせず、rank_feature または term クエリを使用してのみクエリできます。

term クエリは rank_features フィールドに対して、マッチした保存された特徴値を提供された boost で掛け算することによってスコア付けされます。

rank_features フィールドは精度のために9ビットの有効桁を保持するだけで、これは約0.4%の相対誤差に相当します。

スコアと負の相関を持つランク特徴は、positive_score_impactfalse に設定する必要があります(デフォルトは true です)。これは、rank_feature クエリによってスコアリング式を変更するために使用され、特徴の値が増加するのではなく、スコアが減少するようにします。