Lucene RangeQuery не фильтрует соответственно

Как уже указывалось, $(this).attr('action') всегда относится к атрибуту action самой формы, поскольку это элемент, для которого определено ваше событие.

Что вы можете сделать сами, так это проверить formaction из document.activeElement , что дает вам элемент, который в данный момент сфокусирован. Если он не определен, вы возвращаетесь к самому действию формы.

Демо:

$('#myForm').on('submit', function (e) {
  e.preventDefault();
  var url = $(document.activeElement).attr('formaction') || $(this).attr('action');

  console.log(url);
});

6
задан Michael Petrotta 26 October 2011 в 21:00
поделиться

2 ответа

ОБНОВЛЕНИЕ: Как @basZero, сказанный в его комментарии, начиная с Lucene 2.9, можно добавить числовые поля к документам. Просто не забудьте использовать NumericRangeQuery вместо RangeQuery, когда Вы будете искать.

Исходный ответ

Lucene рассматривает числа как слова, таким образом, их порядок является алфавитным:

0
1
12
123
2
22

Это означает, что для Lucene, 12 между 0 и 2. Если Вы хотите сделать надлежащий числовой диапазон, необходимо индексировать дополненные нулем числа, то сделать поиск диапазона [0000 К 0002]. (Для объема дополнения Вас нужно, зависит от ожидаемого диапазона значений).

Если у Вас есть отрицательные числа, просто добавьте другой нуль для неотрицательных чисел. (РЕДАКТИРОВАНИЕ: НЕПРАВИЛЬНО НЕПРАВИЛЬНО НЕПРАВИЛЬНО. Посмотрите обновление),

Если Ваши числа включают дробную часть, оставляют ее, как, и нулевая клавиатура целая часть только.

Пример:

-00002.12
-00001

000000
000001
000003.1415
000022

ОБНОВЛЕНИЕ: Отрицательные числа немного хитры, с тех пор-1 прибывает прежде-2 в алфавитном порядке. Эта статья дает полное объяснение о контакте с отрицательными числами и числами в целом в Lucene. В основном необходимо "закодировать" числа во что-то, что заставляет порядок пунктов иметь смысл.

6
ответ дан 17 December 2019 в 02:33
поделиться

Я создал функцию PHP, которая преобразует числа в доступные для поиска lucene / solr диапазоны.

0,5 преобразуется в 10000000000,5
-0,5 преобразуется в 09999999999,5

function luceneNumeric($numeric)
{
    $negative = $numeric < 0;
    $numeric = $negative ? 10000000000 + $numeric : $numeric;

    $parts = explode('.', str_replace(',', '.', $numeric));

    $lucene = $negative ? 0 : 1;
    $lucene .= str_pad($parts[0], 10, '0', STR_PAD_LEFT);
    $lucene .= isset($parts[1]) ? '.' . $parts[1] : '';

    return $lucene;
}

Кажется, работает, надеюсь, это кому-то поможет!

0
ответ дан 17 December 2019 в 02:33
поделиться
Другие вопросы по тегам:

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