2013-05-10 4 views
0

Я пытаюсь настроить поиск полного имени в Solr. До сих пор я думал, что моя работа прекрасна, пока я не нашел что-то странное, и я не могу понять, как ее исправить.Solr полное имя поиск

Так что я хочу, чтобы выполнять поиск по полному имени. Мой индекс - это база данных, где я получаю имя и фамилию и помещаю их в одно многозначное поле с ключевым словом tokenizer.

Вот мой FieldType:

<fieldType name="text_auto" class="solr.TextField"> 
    <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

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

Я только что заметил что-то неправильно! Например, если я попрошу Dupont dupont, это даст мне каждый Dupont, который существует, даже те, для которых первое имя не совпадает с dupont. Я думаю, это потому, что dup уже второй раз вошел в полное имя ... Проблема в том, что если они ищут «dupont d», они найдут каждый Dupont, который существует, потому что «d» содержится в Dupont! Это не то, что я хочу, я хочу найти каждый Dupont с d по имени (другая строка).

Поэтому мне нужно найти способ заставить его работать, я пробовал много разных токенизаторов и фильтров, но я боюсь, что это невозможно ... Спасибо за любую помощь, которую вы могли бы мне предоставить!

ответ

0

Похоже, вы ищете что-то вроде:

q=dupont d 

Что не будет иметь никаких проблем с поиском условий в любом порядке, или даже в тот же срок в индексе, в случае dupont dupont (I Предположим, кстати, что вы устанавливаете оператор по умолчанию на AND, так как такое поведение удивительно). Если вы хотите найти фразу «DUPONT D» в таком порядке, вы должны искать в кавычках фразу запроса:

q="dupont d" 

или dupont dupont

q="dupont dupont" 
+0

Спасибо за ваш ответ. Пока я использую SolrJ для запроса моего сервера Solr. Лучший способ получить ответы, которые я хочу сейчас, - это взять мой запрос и обработать его на Java перед запросом Solr. Я беру каждое слово, разделенное пробелами, и помещаю «*» до и после, и помещаю «И» между ними. Это прекрасно работает, за исключением моей проблемы. Я пытаюсь заставить его работать с двойными кавычками (я уже пробовал), но он не работает, я попытаюсь определить q.op в моей конфигурации, потому что я этого не сделал! –

+0

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

+0

Я думаю, что лучшим решением будет полагаться на Lucene, чтобы обеспечить высокий результат для документов, которые соответствуют в более широком диапазоне (то есть, в то время как «dupont AND d» соответствует «dupont h» и «dupont d», последний получает более высокий балл). Если вы должны поддерживать поиск подстановочных знаков в запросах, вам понадобится парсер запросов, который его поддерживает (особенно [ComplexPhraseQueryParser] (http: //lucene.apache .org/core/4_1_0/queryparser/org/apache/lucene/queryparser/complexPhrase/ComplexPhraseQueryParser.html)). Кроме того, я рекомендую против ведущих подстановочных знаков, если вы можете их избежать, в интересах производительности. – femtoRgon

Смежные вопросы