Elasticsearch - сопоставить API с полем параметров - PullRequest
0 голосов
/ 24 апреля 2020

Мой код такой:

const [fieldName, setFieldName] = useState('');

    ...

const selectFieldItem = name => {
    setFieldName(name);
    console.log('selected field: ', fieldName);
  };
    ...

const getDocuments = async () => {
        try {
          if (selectedIndexName || value) {
            const response = await client.search({
              index: value,
              body: {
               query: {
                 match: {
                    fieldName: element,
                 },
               },
              },
            });
            console.log('documents', response.hits.hits);
            setDocuments(response.hits.hits);
          }
        } catch (error) {
          console.trace(error.message);
        }
      };

Дело в том, что fieldName является параметром. Так что это должно быть похоже на

"match": 
   {
      "TXN_CODE": "1"
   }

Но эластичный поиск понимает его как строку 'fieldName', как показано ниже

"match": 
   {
      "fieldName": "1"
   }

Любой совет для этого?

Я тоже пробовал это , но не сработало.

const response = await client.search({
          index: value,
          body: {
            query: {
              match: {
                '{{fieldName}}': element,
              },
            },
          },
          params: {
            fieldName: fieldName,
          },
        });

1 Ответ

0 голосов
/ 24 апреля 2020
const response = await client.search({
  index: value,
  body: {
   query: {
     match: {
        [fieldName]: element,
     },
   },
  },
});

Вы можете узнать больше об этом, выполнив поиск variable as json key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...