SQL эффективный ближайший соседний запрос

не уверен, что я понял (извините, если это так). Вам не нужно создавать два сайта. Вам просто нужно организовать контент сайта в проходной структуре (что-то вроде):

В файле с контентом сайта:

const frenchData = [
  {
    idKey: 'aboutus',
    textTitel: aboutUsTextTitelFR,
    textField: aboutUsTextFieldFR
  }
];
const englishData = [
  {
    idKey: 'aboutus',
    textTitel: aboutUsTextTitelEN,
    textField: aboutUsTextFieldEN
  }
];


export const aboutusData = {
    'fr': frenchData,
    'en': englishData
}

Вы можете получить предпочитаемые языки (от пользователя браузер) со следующими строками.

static async getInitialProps({ req }) { const userAgent = req ? req.headers['accept-language'] : navigator.userAgent; return { userAgent }; }

После выполнения форматирования строки для результата userAgent вы получите массив предпочитаемых языков. После этого вам нужно визуализировать передаваемые данные (DE, EN, ES, что угодно)

7
задан FryGuy 7 April 2009 в 02:08
поделиться

3 ответа

Вот некоторые хорошие приближения:

Вы могли вычислить центр массы каждой группы и затем выдержать сравнение на основе расстояния каждого центра групп массы.

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

Еще некоторая информация была бы полезна, такие как:

Информация, постоянно обновляемая и раз так в какой интервал. Как актуальный и насколько точный это должно быть?

1
ответ дан 7 December 2019 в 12:25
поделиться

Вы могли проверить, что я разобрался в вопросе?

Ваша таблица представляет векторы, определенные groupId. Каждый вектор имеет размер чего-то между 100 и 50,000, но нет никакого порядка, определенного на размере. Это - вектор от таблицы, на самом деле представитель класса эквивалентности.

Теперь Вы определяете подобие двух классов эквивалентности как минимальное Евклидово расстояние проекций любых двух представителей классов эквивалентности подпространства первых 30 размеров.

Примеры для проекции к двум размерам:

A = <1, 2, 3, 4>
B = <5, 6, 7, 8, 9, 10>

Представление следующего класса эквивалентности векторов.

<1, 2, 3, 4>    <2, 1, 2, 3>    <3, 1, 2, 4>    <4, 1, 2, 3>
<1, 2, 4, 4>    <2, 1, 3, 2>    <3, 1, 4, 2>    <4, 1, 3, 2>
<1, 3, 2, 4>    <2, 3, 1, 4>    <3, 2, 1, 4>    <4, 2, 1, 3>
<1, 3, 4, 2>    <2, 3, 4, 1>    <3, 2, 4, 1>    <4, 2, 3, 1>
<1, 4, 2, 2>    <2, 4, 1, 3>    <3, 4, 1, 2>    <4, 3, 1, 2>
<1, 4, 3, 2>    <2, 4, 3, 1>    <3, 4, 2, 1>    <4, 3, 2, 1>

Проекция всего представителя этого класса эквивалентности первых двух урожаев размеров.

<1, 2>    <1, 3>    <1, 4>
<2, 1>    <2, 3>    <2, 4>
<3, 1>    <3, 2>    <3, 4>
<4, 1>    <4, 2>    <4, 3>

B представляет класс эквивалентности с 720 элементами. Проекция к первым двум размерам приводит к 30 элементам.

< 5, 6>    < 5, 7>    < 5, 8>    < 5, 9>    < 5, 10>
< 6, 5>    < 6, 7>    < 6, 8>    < 6, 9>    < 6, 10>
< 7, 5>    < 7, 6>    < 7, 8>    < 7, 9>    < 7, 10>
< 8, 5>    < 8, 6>    < 8, 7>    < 8, 9>    < 8, 10>
< 9, 5>    < 9, 6>    < 9, 7>    < 9, 8>    < 9, 10>
<10, 5>    <10, 6>    <10, 7>    <10, 8>    <10,  9>

Таким образом, расстояние A и B является квадратным корнем 8, потому что это - минимальное расстояние двух векторов от проекций. Например, <3, 4> и <5, 6> приводят к этому расстоянию.

Так, действительно ли я прав со своим пониманием проблемы?

Действительно наивный алгоритм для n векторов с m компонентами каждый должен был бы вычислить (n - 1) расстояния. Для каждого расстояния алгоритм вычислил бы расстояния m! / (m - 30)! проекция для каждого вектора. Таким образом для 100 размеров (Ваша нижняя граница) существует 2.65*10^32 возможная проекция для вектора. Это требует для вычисления о 7*10^64 расстояния между проекциями и нахождением, что минимум находит расстояние двух векторов. И затем повторите это n времена.

Я надеюсь, что неправильно понял Вас или сделал ошибку. Еще это звучит как что-то между реальным бросанием вызов и не выполнимое.

Что-то, о чем я думал, заказывает векторные компоненты и пытается соответствовать им. Используя манхэттенское расстояние - если возможный - может помочь упростить решение.

4
ответ дан 7 December 2019 в 12:25
поделиться

Наивная версия была бы чем-то вроде этого: (не пробежавший анализатор запроса)

select groupid, min(distance) as mindist
from
   (select other.groupid as groupid,
           min(abs(other.value - us.value)) as distance
    from g us
    join g other on other.groupid != us.groupid
    where us.groupid = ?)
order by mindist
group by groupid

Затем для использования в своих интересах indicies:

select groupid, min(abs(value - usvalue)) as mindist
from
   (select other.groupid as groupid,
           max(other.value) as value,
           us.value as usvalue
    from g us
    join g other on other.groupid != us.groupid and other.value <= us.value
    where us.groupid = ?

    union

    select other.groupid as groupid,
           min(other.value) as value,
           us.value as usvalue
    from g us
    join g other on other.groupid != us.groupid and other.value >= us.value
    where us.groupid = ?)
order by mindist
group by groupid

Это должно, надо надеяться, позволить mysql использовать индекс для быстрого нахождения ближайших соседей на соединении.

Могли бы быть ошибки в этом, но надо надеяться этот ход мыслей поможет.

0
ответ дан 7 December 2019 в 12:25
поделиться
Другие вопросы по тегам:

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