Как избежать одиночной кавычки в поиске: поиск?
Я использую search:search
API.
в search options grammar
Я использовал цитату как "'
"
<quotation>'</quotation>
Теперь, если строка поиска содержит одну кавычку, это создаст неправильную cts:query
,
например: "pubTitle:''test pub''"
За pubTitle
Я определил ограничение element-word-query
,
Но из-за одинарной цитаты '
формируется cts-word
запросы
Обновить:
У меня есть XML-файл, как указано ниже
<root>
<pubTitle>'test''pu'b'</pubTitle>
<firstPage>12</firstPage>
<lastPage>45</lastPage>
</root>
Ограничение определено:
<constraint name="pubTitle">
<value>
<element ns="" name="pubTitle"/>
</value>
</constraint>
Теперь я хочу найти документ с текстом 'test''pu'b'
в элементе pubTitle.
Каким будет мой поисковый запрос? (search:search
первый параметр)
Помогите!
1 ответ
Обновление помогло прояснить ситуацию. У вас есть контент с одинарными кавычками.
Точнее, вы хотите искать по названию, содержащему одинарные кавычки, пробелы и, возможно, даже взаимосвязь. Выполнение поиска по значению имеет смысл, но строка поиска, которую вы передаете в search:search
разбирается Если вы не заключите поисковые значения или фразы в кавычки, синтаксический анализатор будет считать, что значение заканчивается на следующем пробеле. Если бы вы не изменили <quotation>
вариант, парсер остановился бы после ''test
(в первоначальном примере вы дали).
изменения <quotation>
одиночные кавычки усугубили ситуацию, потому что в вашем поисковом значении также есть одинарные кавычки, и парсер их перепутает. Я не удивлюсь, если search:search
закончил поиск test
а также pub
в полнотекстовом, что является поведением по умолчанию.
Двойная кавычка тоже немного хитрая, если вы хотите вызвать search:search
вручную. Вам нужны двойные кавычки, чтобы обернуть искомое значение, а также определить всю строку поиска. Вы можете избежать внутренних двойных кавычек, удвоив их, записав их как "
сущность, но вы также можете использовать временный фрагмент XML. Что-то вроде этого:
xquery version "1.0-ml";
xdmp:document-insert("/test.xml", <root>
<pubTitle>'test'' pu'b'</pubTitle>
<firstPage>12</firstPage>
<lastPage>45</lastPage>
</root>)
;
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
let $searchText := <txt>'test'' pu'b'</txt>/concat('"', ., '"')
return
search:search(
"pubTitle:" || $searchText,
<options xmlns="http://marklogic.com/appservices/search">
<constraint name="pubTitle">
<value>
<element ns="" name="pubTitle"/>
</value>
</constraint>
</options>
)
Я надеюсь, что это поможет вам!