Запрос Elasticsearch и Kibana не работают должным образом - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь изучить Elasticsearch и использую Kibana для визуализации вещей.Я не могу понять, что не так с моим отображением и запросами.

Я пытаюсь сохранить метаданные фотографии (данные iptc).И у меня есть следующее сопоставление для него:

  {
"settings": {
  "index": {
    "analysis": {
      "filter": {},
      "analyzer": {
        "keyword_analyzer": {
          "filter": [
            "lowercase",
            "asciifolding",
            "trim"
          ],
          "char_filter": [],
          "type": "custom",
          "tokenizer": "keyword"
        },
        "edge_ngram_analyzer": {
          "filter": [
            "lowercase"
          ],
          "tokenizer": "edge_ngram_tokenizer"
        },
        "edge_ngram_search_analyzer": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "edge_ngram_tokenizer": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 5,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  }
},
"mappings": {
  "doc": {
    "properties": {
      "photo_added": {
        "type": "date",
        "index": true,
        "format": "yyyy-MM-dd' 'H:m:s"
      },
      "photo_id": {
        "type": "long",
        "index": true
      },
      "photo_owner": {
        "type": "long",
        "index": true
      },
      "project": {
        "type": "long",
        "index": true
      },
      "iptc": {
        "type": "nested",
        "properties": {
          "caption/abstract": {
            "type": "text",
            "index": true
          },
          "copyright notice": {
            "type": "text",
            "index": true
          },
          "keywords": {
            "type": "text",
            "index": true,
            "fields": {
              "keywordstring": {
                "type": "text",
                "analyzer": "keyword_analyzer"
              },
              "edgengram": {
                "type": "text",
                "analyzer": "edge_ngram_analyzer",
                "search_analyzer": "edge_ngram_search_analyzer"
              },
              "completion": {
                "type": "completion"
              },
              "keyword": {
                "type": "keyword"
              }
            }
          },
          "object name": {
            "type": "text",
            "index": true
          },
          "province/state": {
            "type": "text",
            "index": true
          },
          "sub-location": {
            "type": "text",
            "index": true
          },
          "time created": {
            "type": "text",
            "index": true
          },
          "urgency": {
            "type": "text",
            "index": true
          },
          "writer/editor": {
            "type": "text",
            "index": true
          }
        }
      }
    }
  }
}
}

Дело в том, что я хочу запрос, который ищет по ключевым словам и подпись для существования текста поиска.Всякий раз, когда текст поиска находится в ключевых словах, оценка увеличивается, потому что это указывает на то, что фотография имеет более высокое значение.Поэтому я сформулировал следующий запрос (где значением является текст поиска):

GET /photos/_search
{
  "query": {
    "dis_max": {
      "queries": [
        {
          "fuzzy": {
            "iptc.keywords": {
              "value": "value",
              "fuzziness": 1,
              "boost": 1
            }
          }
        },
        {
          "fuzzy": {
            "iptc.caption/abstract": {
              "value": "value",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}

Однако, похоже, он не находит совпадений, несмотря на то, что значение есть в документах ... И я не могуКажется, создается простой запрос на совпадение, который будет сопоставляться с точным текстом ... например:

GET /photos/doc/_search?error_trace=true
{
  "query": {
    "match": {
      "iptc.caption/abstract": "exact value from one of the documents"
    }
  }
}

Вернет 0 результатов ... Однако текст поиска точно находится в документе.не знаю что делать знаю.Что еще хуже (для меня, так как я почти лысый, из-за разочарования, которое вызывает у меня) Кибана, кажется, действует ... Я почти уверен, что это что-то действительно простое (дата документа в течение 5 лет), но когдафильтруя точное значение вставленной копии, он возвращает 0 результатов ... как показано на скриншоте ...

Results

Я схожу с ума здесь.Кто-то знает, как это исправить или что, черт возьми, я делаю неправильно?

1 Ответ

0 голосов
/ 17 мая 2018

Я нашел решение, которое есть в документации Elastic.

Поскольку вложенные документы индексируются как отдельные документы, к ним можно получить доступ только в рамках вложенного запроса, вложенных / reverse_nested агрегатов или вложенных внутренних совпадений.

Документация

Итак, я построил следующий запрос, который работает.

{
  "query": {
    "nested": {
      "path": "iptc",
      "query": {
        "bool": {
          "should": [
            {
              "dis_max": {
                "queries": [
                  {
                    "fuzzy": {
                      "iptc.keywords": {
                        "value": "Feyenoord",
                        "boost": 1
                      }
                    }
                  },
                  {
                    "fuzzy": {
                      "iptc.caption/abstract": {
                        "value": "Feyenoord",
                        "fuzziness": 1
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...