Возникла проблема при применении поиска по столбцу указателя - Parse Opensource - Cloud Function - PullRequest
0 голосов
/ 06 мая 2019

У меня есть две таблицы: -

Страны Клиенты [имеют номер имени, адреса, города, почтового индекса, адреса электронной почты и т. Д.] В таблице клиентов есть страна столбца [Указатель стран].

Теперь то, что я хочу: у меня есть форма поиска, и если кто-то поставит «aus» в поле поиска и нажмет кнопку «Поиск», я хочу отобразить все подходящие записи, я хочу применить поиск к «Имя», адрес электронной почты, адрес, город и название страны [указатель] "

Так что, если у кого-то есть имя Остин или название страны," Австралия "будет результатом поиска, в настоящее время я использую" содержит "вимя, адрес электронной почты и он работает нормально.

Я пытался применить поиск по стране, но не удалось, может кто-нибудь, пожалуйста, помогите применить это.

Вот мой текущий код, который работает [Без поиска по стране] я использую облачные функции.

`var customerName = new Parse.Query("customer");
  var customerEmail = new Parse.Query("customer");
  var customerAddress = new Parse.Query("customer");
  customerName.contains('name','aus');
  customerEmail.contains('email','aus');
  customerAddress.contains('address','aus');

 var serviceQuery = new Parse.Query.or(
      customerName,
      customerEmail,
      customerAddress
      // country
  );

............. `Спасибо

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Попробуйте что-то вроде этого:

var customerName = new Parse.Query('customer');
var customerEmail = new Parse.Query('customer');
var customerAddress = new Parse.Query('customer');
customerName.contains('name','aus');
customerEmail.contains('email','aus');
customerAddress.contains('address','aus');

var countryQuery = new Parse.Query('country');
countryQuery.contains('name','aus');
var customerCountry = new Parse.Query('customer');
customerCountry.matchesQuery('country', countryQuery);

var serviceQuery = new Parse.Query.or(
  customerName,
  customerEmail,
  customerAddress,
  customerCountry
);

Вместо поиска по каждому из полей клиентов, вы можете использовать полнотекстовый поиск: https://docs.parseplatform.org/js/guide/#full-text-search

0 голосов
/ 10 мая 2019

Решением будет вычисление поля fullTextSearch в облаке beforeSave ваших объектов. Лучше всего хранить эту строку в нижнем регистре и без диакритических знаков. Это даст лучшие результаты, если вы сделаете то же самое при поиске (так что André будет соответствовать andre или AnDrÉ).

Вот помощник, который я использовал для этого:

  /**
   * Generates fulltextsearch for any Parse.Object. It's the concatenation of the value
   * of all fields in propertiesToAdd, separated by a whitespace and lowercased.
   * Often used in beforeSave :)
   * @param propertiesToAdd the list of the object properties names that we want to handle in fulltextsearch
   * @param newObject the new version of the object
   */
  static generateFulltextSearch(propertiesToAdd, newObject): string {
    let result = '';
    propertiesToAdd.forEach(property => {
      let value = newObject.get(property);
      if (value) {
        result += DiacriticRemove(value) + ' ';
      }
    });

    return result.trim().toLocaleLowerCase();
  }

DiacriticRemove - это просто вызов Diacritics package .

В вашем beforeSave (в облачном коде) вам просто нужно позвонить:

  myCustomer("myFullTextField", generateFulltextSearch(["name", "email", "address", "country", "anyotherField"], myCustomer))

Затем, когда вы ищете:

var customer = new Parse.Query("customer");
// Don't forget to lowercase and remove diacritics from your searched string.
customer.contains('myFullTextField','aus');

и вуаля:)

...