Моя схема:Solr: поиск с различными комбинациями пространства, дефис, обсадных и пунктуацией
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0"
splitOnCaseChange="1" splitOnNumerics="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English"
protected="protwords.txt"/>
</analyzer>
</fieldType>
Комбинации, которые я хочу работать:
"Walmart", "WalMart", «Wal Mart "," Wal-Mart "," Wal-mart "
Учитывая любую из этих строк, я хочу найти другую.
Таким образом, существует 25 таких комбинаций, как указано ниже:
(Первая колонка обозначает входной текст для поиска, второй столбец обозначает ожидается матч)
(Walmart,Walmart)
(Walmart,WalMart)
(Walmart,Wal Mart)
(Walmart,Wal-Mart)
(Walmart,Wal-mart)
(WalMart,Walmart)
(WalMart,WalMart)
(WalMart,Wal Mart)
(WalMart,Wal-Mart)
(WalMart,Wal-mart)
(Wal Mart,Walmart)
(Wal Mart,WalMart)
(Wal Mart,Wal Mart)
(Wal Mart,Wal-Mart)
(Wal Mart,Wal-mart)
(Wal-Mart,Walmart)
(Wal-Mart,WalMart)
(Wal-Mart,Wal Mart)
(Wal-Mart,Wal-Mart)
(Wal-Mart,Wal-mart)
(Wal-mart,Walmart)
(Wal-mart,WalMart)
(Wal-mart,Wal Mart)
(Wal-mart,Wal-Mart)
(Wal-mart,Wal-mart)
Текущие ограничения с моей схемой:
1. "Wal-Mart" -> "Walmart",
2. "Wal Mart" -> "Walmart",
3. "Walmart" -> "Wal Mart",
4. "Wal-mart" -> "Walmart",
5. "WalMart" -> "Walmart"
Скриншот анализатора:
Я пробовал различные комбинации фильтров пытаются решить эти ограничения, так что я получил споткнулся решением при условии, по адресу: Solr - case-insensitive search do not work
Хотя, кажется, преодолеть одно из ограничений, которые у меня есть (см # 5 WalMart - > Walmart), это в целом хуже, чем у меня раньше. Сейчас он не работает в тех случаях, как:
(Wal Mart,WalMart),
(Wal-Mart,WalMart),
(Wal-mart,WalMart),
(WalMart,Wal Mart)
besides cases 1 to 4 as mentioned above
Analyzer после изменения схемы:
Вопросы:
Почему "WalMart" не соответствует "Walmart" с моей первоначальной схеме ? Анализатор Solr наглядно показывает мне, что во время индексации было произведено 3 жетона:,
mart
,walmart
. В течение времени запроса: он выдал 1 токен:walmart
(пока неясно, почему он будет производить только 1 токен), я не понимаю, почему он не соответствует, так какwalmart
содержится в токенах запроса и индекса.Проблема, о которой я упоминал здесь, - это всего лишь один случай использования. Есть еще несколько сложных из них, как:
Слова с апострофа: "Mc Donalds", "Макдональдс", "Mc Donalds", "Макдональдс",
Слова "Макдональдс", "Макдоналдс" с различными пунктуациями: «Mc-Donald Engineering Company, Inc.»
В общем, что это лучший способ, чтобы обойти моделирования схемы с такого рода требования? NGrams? Укажите одинаковые данные в разных полях (в разных форматах) и используйте директиву copyField (https://wiki.apache.org/solr/SchemaXml#Indexing_same_data_in_multiple_fields)? Каковы последствия этого?
EDIT: Оператор по умолчанию в моей схеме Solr имеет значение AND. Я не могу изменить его на OR.
Переход с 4.4 до 4.10 - это обновление ... :) – cheffe
@cheffe thats weird .. Я думал, что 4.4 больше, чем 4.10 :) –