Solr подстановочный синтаксис работает только в конце искомого текста? - PullRequest
0 голосов
/ 08 марта 2019

Я реализовал индекс Solr 7.6 и заполнил его.Моя первая схема проста ...

{
"add-field": [{
    "name": "name",
    "type": "text_en",
    "indexed": true,
    "stored": true
}, {
    "name": "description",
    "type": "text_en",
    "indexed": true,
    "stored": true
}, {
    "name": "datafile-meta",
    "type": "text_en",
    "indexed": true,
    "stored": false
}, {
    "name": "datafile-content",
    "type": "text_en",
    "indexed": true,
    "stored": false
}]
}

Я добавил пару сотен документов, зная, что два содержат слово "ананас".

Затем я приступил к проверке запросов ...

((name:pineapple)OR(description:pineapple)OR(datafile-meta:pineapple)OR(datafile-content:pineapple))

хиты = 2 статуса = 0 QTime = 0

((name:pine*)OR(description:pine*)OR(datafile-meta:pine*)OR(datafile-content:pine*))

хиты = 2 статуса = 0 QTime = 1

((name:*apple)OR(description:*apple)OR(datafile-meta:*apple)OR(datafile-content:*apple))

хиты = 0 статус = 0QTime = 3

((name:p*ple)OR(description:p*ple)OR(datafile-meta:p*ple)OR(datafile-content:p*ple))

хиты = 0 статус = 0 QTime = 3

((name:p?????ple)OR(description:p?????ple)OR(datafile-meta:p?????ple)OR(datafile-content:p?????ple))

хиты = 0 статус = 0 QTime = 2

Так что только pineappleи pine* вернули хиты.Я не понимаю, почему другие комбинации символов: *apple, p*ple и p?????ple вернули ноль.

Я выбрал неправильный тип поля?

1 Ответ

0 голосов
/ 08 марта 2019

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

На ваш вопрос, почему это не бьет. Solr не анализирует текст, как только в нем появляется подстановочный знак (*, ?). Но поскольку ваше поле использует анализируемый тип, индексированное содержимое не соответствует запрашиваемому содержимому. Вы можете использовать Экран анализа вашего экземпляра Solr, чтобы проверить это.

Как правило, когда вы начинаете использовать подстановочные знаки, вы делаете что-то, что можно сделать лучше, используя правильные токенизаторы и фильтры. Когда вам нравится использовать подстановочные знаки, вы все еще думаете о шаблонах, которые происходят из неиндексированных систем - например, как запросы в базе данных SQL. В системах, которые я разработал до сих пор, мы довольно скоро начали убирать символы подстановки из пользовательского ввода и заменяли их пробелами, чтобы избежать этого сговора.

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