Swift & amp; Firebase: поиск по содержанию ребенка, как поисковая система [дубликат]

Я знаю, что поздно ответить, но тем не менее это может вам помочь!

Вам просто нужно установить размер текста на одном устройстве и запустить его, проверить, подходит ли он идеально. Скажем, это устройство xxxhdpi, и вы задали размер текста до 34sp. Вы можете использовать нижеприведенный код, чтобы получить размеры текста для других устройств, которые будут hdpi, xhdpi, xxhdpi.

import java.util.Scanner;
public class MyClass {
    public static void main(String args[]) {
        int resolutionSpValue = 0,whichRes = 1,resolution = 0;
        int hdpi = 4, xhdpi = 6, xxhdpi = 8, xxxhdpi = 12;
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter sp value : ");
        resolutionSpValue = sc.nextInt();
        System.out.println("\n"+resolutionSpValue+"sp in which resolution : ");
        System.out.println("1. HDPI\n2. XHDPI\n3. XXHDPI\n4. XXXHDPI");
        whichRes = sc.nextInt();
        switch(whichRes){
            case 1:
                resolution = hdpi;
                break;
            case 2:
                resolution = xhdpi;
                break;
            case 3:
                resolution = xxhdpi;
                break;
            case 4:
                resolution = xxxhdpi;
                break;
        }
        getFinalValue(resolutionSpValue,resolution);
    }

    private static void getFinalValue(int resolutionSpValue,int whichResolution){
        final int hdpi = 4, xhdpi = 6, xxhdpi = 8, xxxhdpi = 12;
        int hd = 0, xhd = 0, xxhd = 0, xxxhd = 0,val = (resolutionSpValue/whichResolution);
        switch(whichResolution){
            case hdpi:
                xhd = xhdpi*val;
                xxhd = xxhdpi*val;
                xxxhd = xxxhdpi*val;
                System.out.println("\n\nHDPI : "+resolutionSpValue+"sp\nXHDPI : "+xhd+"sp\nXXHDPI : "+xxhd+"sp\nXXXHDPI : "+xxxhd+"sp");
                break;
            case xhdpi:
                hd = hdpi*val;
                xxhd = xxhdpi*val;
                xxxhd = xxxhdpi*val;
                System.out.println("\n\nHDPI : "+hd+"sp\nXHDPI : "+resolutionSpValue+"sp\nXXHDPI : "+xxhd+"sp\nXXXHDPI : "+xxxhd+"sp");
                break;
            case xxhdpi:
                hd = hdpi*val;
                xhd = xhdpi*val;
                xxxhd = xxxhdpi*val;
                System.out.println("\n\nHDPI : "+hd+"sp\nXHDPI : "+xhd+"sp\nXXHDPI : "+resolutionSpValue+"sp\nXXXHDPI : "+xxxhd+"sp");
                break;
            case xxxhdpi:
                hd = hdpi*val;
                xhd = xhdpi*val;
                xxhd = xxhdpi*val;
                System.out.println("\n\nHDPI : "+hd+"sp\nXHDPI : "+xhd+"sp\nXXHDPI : "+xxhd+"sp\nXXXHDPI : "+resolutionSpValue+"sp");
                break;
        }
    }
}

26
задан Frank van Puffelen 8 June 2016 в 19:22
поделиться

2 ответа

Долгосрочная Firebase будет иметь более продвинутые запросы, поэтому, надеюсь, она будет поддерживать такую ​​вещь напрямую, без необходимости делать что-то особенное. До тех пор у вас есть несколько вариантов:

  1. Введите код сервера для обработки поиска. Самый простой способ - запустить некоторый код сервера, отвечающий за индексирование / поиск, как вы упомянули. У Firebase есть клиент Node.JS, так что это будет простой способ связать службу с Firebase. Вся передача данных все равно может произойти через Firebase, но вы должны написать службу Node.JS, которая следит за «поисковыми запросами» клиента в определенном месте в Firebase, а затем «отвечает», записав результирующий набор обратно в Firebase, для клиент, чтобы потреблять.
  2. Храните индекс в Firebase, при этом клиенты автоматически обновляют его. Если вы хотите стать действительно умным, вы можете попробовать внедрить схему без сервера, где клиенты автоматически индексируют свои данные по мере их записи ... Таким образом, индекс для полнотекстового поиска будет храниться в Firebase, а когда клиент пишет новый элемент коллекции, он будет также отвечать за обновление индекса соответствующим образом. И чтобы выполнить поиск, клиент будет напрямую потреблять индекс для построения набора результатов. Это действительно имеет смысл для простых случаев, когда вы хотите индексировать одно поле сложного объекта, хранящегося в Firebase, но для полнотекстового поиска это, вероятно, будет довольно грубым. : -)
  3. Сохраните индекс в Firebase с обновлением кода сервера. Вы можете попробовать гибридный подход, когда индекс хранится в Firebase и используется непосредственно клиентами для выполнения поиска, но вместо того, чтобы клиенты обновляли индекс, у вас был бы код сервера, который обновляет индекс, когда новые элементы будут добавлены в коллекцию , Таким образом, клиенты могут искать данные, когда ваш сервер не работает.

До тех пор, пока Firebase не будет иметь более продвинутые запросы, # 1, вероятно, лучше всего, если вы захотите запустить небольшой сервер код. : -)

28
ответ дан Michael Lehenbauer 22 August 2018 в 00:02
поделиться

Текущий метод Google для полнотекстового поиска, похоже, синхронизируется с Algolia или BigQuery с облачными функциями для Firebase .

Здесь представлен пример интеграции в полнотекстовый поиск Algolia Firebase и их пример интеграции BigQuery , который может быть расширен для поддержки полного поиска.

1
ответ дан cgenco 22 August 2018 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: