2014-11-19 3 views
0

фона:Solr частичное совпадение слова

  • Solr 4,10;
  • linux/java - Наверное, они неактуальны в этой точке;

У меня есть слово: ABCDEF. Мне нужно найти все документы, имя которых (поле: NAME) имеет заданное количество писем, общее с ABCDEF. Пример: ABCDEF должен соответствовать для 4 буквы спички:

  • сам по себе (ABCDEF, ABCD, BCDE и т.д.);
  • различные подстановки: B..A.DE..., ..F..A.DE... - где точки находятся здесь другими буквами, чем в ABCDEF.

Я хотел бы попробовать использовать регулярное выражение (например: ^(.?)([ABCDEF] (.?)){4}$), но это будет также соответствовать A..A..B..C (A там дважды) и мне не нужно это.

Поле типа string. Тем не менее, не будет проблемой добавить другое поле, которое будет маркироваться и индексироваться по-разному.

Кроме того, нечеткий поиск/совпадение не было бы вариантом - так как мне нужны эти точные буквы, которые появятся в соответствующем поле.

Любая идея?

Спасибо!

+0

Можете ли вы дать какой-либо прецедент из своего сценария, чтобы я знал, что именно вы хотите сделать. Несколько месяцев назад я тоже был в подобной ситуации, имея дело с solr. –

+0

Ну, это просто: у меня есть имя книги, и мне нужно искать в solr, если есть книга, которая начинается с тех же двух букв (скажем), и у нее есть еще 3 буквы вместе с оригинальным именем. позиция других 3 букв не важна, но она не должна пересекаться с двумя буквами в начале. – dcg

ответ

0

Укажите каждую уникальную букву (или ключ) в качестве отдельного токена - вы можете разделить ее на код индексирования или использовать процессор обновлений, чтобы разделить поле на символы. Обязательно используйте тип поля, который не содержит кратковременных токенов (например, стоп-слова).

Если у вас есть поле с каждой буквой/ключом, используйте параметр mm для (e) dismax, чтобы указать количество терминов, которые должны соответствовать, и предоставить буквы/ключи для поиска в качестве отдельных терминов.

Index: ABCDEF 
Document: field: (A, B, C, D, E, F) 

Query: BCDF 
/select?q=B C D F&mm=4&defType=dismax 

Query: BCDF, at least two must match 
/select?q=B C D F&mm=2&defType=dismax 
Смежные вопросы