Хорошо, теперь я успешно установил solr и index по базе данных со следующей структурой: DB_NAME — solr, Table — users
мой файл db-data-config.xml:
<dataConfig>
<dataSource type="JdbcDataSource"driver="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/solr"user="root"password="" />
<document>
<entity name="users" query="select id,name from users;" />
<field column="ID" name="id" />
<field column="NAME" name="name" />
</document>
</dataConfig>
Который возвращает строки пользователей таблицы базы данных.
Проблема 1:
Но что мне делать, если я хочу выполнить поиск типа «Ракеш Шетти» и он должен вернуть результат «Ракеш Васант Шетти»?
я пытался <entity name="users" query="select id,name from users where name like '%Rakesh Shetty%' ;" />
но он возвращает пустой результат.
Проблема 2:
Кроме того, как я могу сделать этот поисковый запрос динамическим? Я имею в виду, что будет форма с текстовым полем поиска, и она должна запросить, чтобы решить? Я использую php и solr 5.1.0.
Заранее спасибо.
попробуйте схему ниже.
<schema name="simple" version="1.5">
<types>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" preserveOriginal="1" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
</types>
<fields>
<field name='id' type='int' required='true' indexed="true" stored="true"/>
<field name='name' type='text' required='true' indexed="true" stored="true"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>name</defaultSearchField>
<solrQueryParser defaultOperator='OR' />
</schema>
См .: SOLR DIH ИСПОЛЬЗУЯ ТАМОЖЕННЫЕ ПЕРЕМЕННЫЕ
Поэтому в основном вам нужно передать пользовательские переменные в ваш файл DIH.xml, например
http://localhost:8983/solr/{collection_name}/dataimport?command=full-import&name=Rakesh&commit=true
И в файле DIH вы можете получить доступ к этой переменной с ${dataimporter.request.name}
и используйте в своем запросе DIH.
например,
<entity name="users" query="select id,name from users where name ='${dataimporter.request.name}' ;" />
И для вашего динамический поиск ссылка ниже
http://solr.pl/en/2010/10/18/solr-and-autocomplete-part-1/введите описание ссылки здесь