Как разрешить начальные подстановочные знаки в пользовательской веб-части интеллектуального поиска (Kentico 10)

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

Например, у меня есть документ со следующими полями:

  • "documentname", "My-Document-Name"
  • "tags", "1234,5678,9101"
  • "documentdescription", "This is a great Document, My-Document-Name."

Когда я просто ищу "name AND tags:(1234)", я получаю этот документ в своих результатах, потому что он ищет +_content:name.

-- Однако:

Когда я ищу "documentname:(name)^3.0 AND tags:(1234)", я не получаю этот документ в своих результатах.

Конечно, когда я делаю "documentname:(*name*)^3.0", я получаю сообщение об ошибке синтаксического анализа: '*' или '?' нельзя использовать в качестве первого символа в WildcardQuery.

Как я могу включить запрос с подстановочными знаками в моей пользовательской веб-части CMS.Search?


person Austin Perez    schedule 23.08.2018    source источник


Ответы (1)


Прежде всего, вы должны убедиться, что поле, которое вы проверяете, находится в индексе с правильным именем. имя документа может отсутствовать в индексе, его можно назвать _title, в зависимости от того, как настроен ваш индекс. Получите lukeall и проверьте свой индекс (он должен быть в \CMS\App_Data\CMSModules\SmartSearch\YourIndexName). Вы также можете использовать Люк, чтобы проверить свои поиски.

Например, нет тегов, но есть поле documenttags.

P.S. Подстановочные знаки работают, и вы правы, вы не можете использовать их как первый символ по умолчанию (документация Lucene говорит: вы не можете использовать символ * или? в качестве первого символа поиска), но есть способ настроить его в lucene.net, хотя я не знаю, есть ли для этого настройки в Kentico. Но я не думаю, что вам нужны подстановочные знаки, поэтому ваш запрос должен быть (при условии, что у вас есть имя документа и теги документа в индексе):

+(documentname:"My-Name" AND documenttags:"tag1")
person Peter Mogilnitski    schedule 23.08.2018
comment
Спасибо, Питер, я использовал Luke All для тестирования поиска. Все эти поля индексируются правильно, теги — это настраиваемое поле. Одна проблема заключалась в том, что имя документа не токенизировалось. Я исправил эту проблему, и теперь, если я ищу имя, документ отображается, но если я ищу документ? имя, я не получаю результатов? - person Austin Perez; 24.08.2018
comment
? поиск ищет термины, которые соответствуют термину с заменой одного символа. Таким образом, document*name должен работать, потому что он ищет 0 или более символов. - person Peter Mogilnitski; 24.08.2018