\n The basic and default usage is to use one query on several\n fields. It is possible to specify filters on specific fields.\n
\n\n The simple_query_string
query supports the\n following operators:\n
+
signifies AND operation\n |
signifies OR operation\n -
negates a single token\n \"
wraps a number of tokens to signify a phrase\n for searching\n *
at the end of a term signifies a prefix query\n (
and )
signify precedence\n ~N
after a word signifies edit distance\n (fuzziness)\n ~N
after a phrase signifies slop amount\n (proximity search)\n \n To use one of these characters literally, escape it with a\n preceding backslash \\
.\n
\n \"fried eggs\" +(eggplant | potato) -frittata
\n
\n Using the advanced text query enables combining fields in which\n to search specific text. It is possible to specify filters on\n specific fields.\n
\n\n The query_string
query supports the following\n operators:\n
AND
or &&
signifies AND\n operation\n AND
or ||
signifies OR operation\n NOT
or !
signifies NOT operation\n +
signifies token must be present\n -
negates a single token\n \"
wraps a number of tokens to signify a phrase\n for searching\n ?
wildcard to replace a single character\n *
wildcard to replace zero or more characters\n ~N
after a word signifies edit distance\n (fuzziness)\n ~N
after a phrase signifies slop amount\n (proximity search)\n [min TO max]
specifies inclusive ranges for\n dates, numeric or string fields\n \n {\"{\"}min TO max{\"}\"}\n
{\" \"}\n specifies exclusive ranges for dates, numeric or string fields\n >
, >=
, <
or{\" \"}\n <=
\n ^N
after a token signifies importance (boosting).\n Default is 1
\n (
and )
\n \n Be aware that wildcard queries can use an enormous amount of\n memory and perform very badly.\n
\n\n Allowing a wildcard at the beginning of a word is particularly\n heavy, because all terms in the index need to be examined, just\n in case they match.\n
\n\n Mixing fuzzy and wildcard operators is not supported. When\n mixed, one of the operators is not applied\n
\n\n You should escape the reserved characters them with a leading\n backslash:{\" \"}\n {'+ - = && || > < ! ( ) { } [ ] ^ \" ~ * ? : \\\\ /'}
\n
\n <
and >
can’t be escaped at all.\n The only way to prevent them from attempting to create a range\n query is to remove them from the query string entirely.\n
\n \n KnowING IPR{\" \"}\n project\n {\" \"}\n is generally focused on the topic of technology transfer and\n specifically with the topic of management of intellectual property\n rights as a factor of innovation. To reach the aims of the project\n we are building an institutional platform (\n supported by online platform), where different\n stakeholders will be able to retrieve information on importance of\n technology transfer, IP{\" \"}\n protection, opportunities arising from{\" \"}\n IP protection and on\n tools to properly manage own{\" \"}\n IP. The goal of the\n project is to improve cooperation{\" \"}\n SMEs and research\n institutions through empowerment of stakeholders with knowledge on\n recognition and utilization of{\" \"}\n IP protection.\n
\n\n The Standalone Application is a self-hosting solution of this\n application, with the additional feature to upload your own\n files to your search request.\n
\n\n You should use the Standalone Application if you want to:\n
\n\n The{\" \"}\n handleClick(e, Tab.REQUIREMENTS)}\n >\n requirements\n {\" \"}\n show you what you need to prepare, in order to{\" \"}\n handleClick(e, Tab.INSTALL)}\n >\n install\n {\" \"}\n the standalone application on your machine.\n
\n\n The{\" \"}\n handleClick(e, Tab.INSTALL)}\n >\n installation section\n {\" \"}\n shows you how to install Knowing.App on any machine supporting\n Docker.\n
\n\n You can download the KnowING.App{\" \"}\n \n here.\n \n
\n\n You need the following to install the Application in your\n infrastructure:\n
\ndocker
and docker-compose
\n \n Install the Docker Engine on your Machine.{\" \"}\n \n Learn more\n \n .\n
\n\n Note: Make sure that your Docker Engine is\n using Linux Containers.\n
\n\n You need internet access to{\" \"}\n \n download\n {\" \"}\n the KnowING.App.zip
, the latest KnowING.App\n Container and to query the Report Generation Module in\n production. In production you only need access to{\" \"}\n 178.172.41.73:5557
and to google services for the\n statistical analysis.\n
\n To send emails to your users, providing password reset links,\n account validation links a SMTP mailbox is required. You need\n the following information:\n
\n\n You need a public URL with a designated SSL certificate. It can\n also be the internal Machine name/IP4 address, if you are not\n planning to expose the Standalone Application to the public.\n
\n\n You need the following information about your SSL certificate to\n integrate it fully into the Standalone Application:\n
\n\n If you use the default installation, you need 4 available Ports\n on your Machine. You can change them to any port you desire.\n
\n5000
\n 5001
\n 27017
\n 5341
\n \n This application is served via a Kestrel Server. If you require\n an additional layer of security, do not expose the Application\n directly but attach an NGINX or IIS reverse proxy in front of\n it. Learn more about{\" \"}\n \n Kestrel\n \n ,{\" \"}\n \n IIS Reverse Proxy\n {\" \"}\n or{\" \"}\n \n NGINX Reverse Proxy\n \n .\n
\n\n Follow the four steps to install the Application on your\n Machine:\n
\n.env
with the information you accumulated,\n while going through the{\" \"}\n handleClick(e, Tab.REQUIREMENTS)}\n >\n Requirements\n \n .env
and docker-compose.yml
files\n docker-compose up -d
\n \n Open a browser and navigate to your designated URL\n
\n\n Run the following to update the Application on your Machine:\n
\n \n docker-compose up --force-recreate --build -d knowing.app\n
\n
\n Open a browser and navigate to your designated URL\n
\n\n Remove the seq
and mongo
containers in\n your docker-compose.yml
. Remove the dependencies{\" \"}\n depends_on
in your knowing.app
{\" \"}\n container. Modify the SEQ_URL
and{\" \"}\n ASPNETCORE_ConnectionStrings__MongoDbDatabase
{\" \"}\n environment variables in your knowing.app
{\" \"}\n container.\n
\n Note: Use host.docker.internal
, if\n you need to reference localhost
\n
\n A license is a contractual agreement between the owner of a patent and\n the licensee that permits the use of the patent under defined terms of\n use. There is no obligation to inform the EPO or any other authority\n about licenses of patents or of any intent to license, so licensing data\n is far from complete. KnowING IPR thus compiled information available to\n different patenting authorities (EPO for licensed/WIPO for licensable)\n and compiled other links which can allow checking for this.\n
\n{owners[0].name}
\n )}\n\n Please select an already saved query or save the current query\n to see your personalized results.\n
\n \n >\n ) : (\n{result.summary}
}\n\n {current ? (\n current.description ? (\n current.description\n ) : (\n
{text}
\n \n >\n);\n\nexport { Login, openLoginModal, LoginButton };\n","import { useEffect, useState } from \"react\";\n\nconst useObservable = (observable) => {\n const [state, setState] = useState(observable.value);\n\n useEffect(() => {\n const subscribed = observable.subscribe(setState);\n return () => subscribed.unsubscribe();\n }, [observable]);\n return state;\n};\n\nexport { useObservable };\n","import { useSharedState } from \"hooks\";\nimport { accountService } from \"services\";\nimport { openLoginModal } from \"account/Login\";\nimport { openRegisterModal } from \"account/Register\";\nimport { openProfileModal } from \"account/Profile\";\n\nconst useAuth = () => {\n const [user] = useSharedState(accountService.user);\n return {\n user,\n logout: accountService.logout,\n profile: openProfileModal,\n login: openLoginModal,\n register: openRegisterModal,\n };\n};\n\nexport { useAuth };\n","import { useMemo } from \"react\";\nimport { useSharedState } from \"hooks\";\nimport { queryService } from \"services\";\n\nconst useQuery = () => {\n const [query] = useSharedState(queryService.query$);\n const resultset = useMemo(\n () => (query && query.report && query.report.resultset) || [],\n [query]\n );\n const actions = useMemo(\n () => ({\n create: queryService.create,\n current: queryService.current,\n edit: queryService.edit,\n delete: queryService.delete,\n topic: queryService.topic,\n note: queryService.note,\n response: queryService.response,\n file: queryService.file,\n download: queryService.download,\n }),\n []\n );\n return { query, resultset, actions };\n};\n\nexport { useQuery };\n","import { useMemo } from \"react\";\nimport { useQuery } from \"./useQuery\";\n\nconst useResponses = () => {\n const { query, actions: queryAction } = useQuery();\n const responseIds = useMemo(\n () =>\n (query && query.report && query.report.resultset.map((r) => r.id)) || [],\n [query]\n );\n const actions = useMemo(\n () => ({\n note: queryAction.note,\n response: queryAction.response,\n download: queryAction.download,\n }),\n [queryAction]\n );\n return { responseIds, actions };\n};\n\nexport { useResponses };\n","import { useMemo } from \"react\";\nimport { useSearchQuery, useSearchResult, useSearchStatus } from \"hooks\";\nimport { searchService } from \"services\";\n\nconst useSearch = (abort = true) => {\n const [query, setQuery] = useSearchQuery(abort);\n const [result, setResult] = useSearchResult();\n const [status, setStatus] = useSearchStatus();\n const actions = useMemo(\n () => ({\n execute: searchService.execute,\n reset: searchService.reset,\n abort: searchService.abort,\n }),\n []\n );\n return {\n query,\n setQuery,\n result,\n setResult,\n status,\n setStatus,\n actions,\n };\n};\n\nexport { useSearch };\n","import { useMemo, useCallback } from \"react\";\nimport { useSharedState, useSearchStatus } from \"hooks\";\nimport { StatusType } from \"data/Types\";\nimport { searchService } from \"services\";\n\nconst useSearchQuery = (abort = true) => {\n const [search, setSearch] = useSharedState(searchService.search$);\n const [status, setStatus] = useSearchStatus();\n const setSearchAndAbort = useCallback(\n (search) => {\n setSearch(search);\n setStatus(status | StatusType.Modified);\n if (status & StatusType.Querying) {\n console.warn(\"Aborting... new user input\");\n searchService.abort(true);\n }\n },\n [setSearch, status, setStatus]\n );\n return useMemo(() => [search, abort ? setSearchAndAbort : setSearch], [\n search,\n setSearchAndAbort,\n setSearch,\n abort,\n ]);\n};\n\nexport { useSearchQuery };\n","import { useSharedState } from \"hooks\";\nimport { searchService } from \"services\";\n\nconst useSearchResult = () => {\n return useSharedState(searchService.result$);\n};\n\nexport { useSearchResult };\n","import { useState, useEffect } from \"react\";\nimport { searchService } from \"services\";\n\nconst useSearchStatus = () => {\n const observable = searchService.status$;\n const [state, setState] = useState(observable.value);\n\n useEffect(() => {\n const subscribed = observable.subscribe(setState);\n return () => subscribed.unsubscribe();\n }, [observable]);\n const newSetState = (newState) => observable.next(newState);\n return [state, newSetState];\n};\n\nexport { useSearchStatus };\n","import { useEffect, useState, useCallback } from \"react\";\n\nconst useSharedState = (observable) => {\n const [state, setState] = useState(observable.value);\n\n useEffect(() => {\n const subscribed = observable.subscribe(setState);\n return () => subscribed.unsubscribe();\n }, [observable]);\n const newSetState = useCallback(\n (newState) => observable.next({ ...observable.value, ...newState }),\n [observable]\n );\n return [state, newSetState];\n};\n\nexport { useSharedState };\n","import { useObservable } from \"hooks\";\nimport { detailService } from \"services\";\n\nconst useSearchWeb = () => [\n useObservable(detailService.web$),\n detailService.web,\n];\n\nexport { useSearchWeb };\n","import { useObservable } from \"hooks\";\nimport { detailService } from \"services\";\n\nconst useSearchSimilar = () => [\n useObservable(detailService.similar$),\n detailService.similar,\n];\n\nexport { useSearchSimilar };\n","import { useMemo } from \"react\";\nimport { useObservable } from \"hooks\";\nimport { topicService } from \"services\";\n\nconst useTopic = () => {\n const topics = useObservable(topicService.topics$);\n const current = useObservable(topicService.current$);\n const queries = useObservable(topicService.queries$);\n const actions = useMemo(\n () => ({\n create: topicService.create,\n current: topicService.current,\n fetch: topicService.fetch,\n edit: topicService.edit,\n delete: topicService.delete,\n }),\n []\n );\n return { topics, current, queries, actions };\n};\n\nexport { useTopic };\n","import { useState, useMemo, useEffect } from \"react\";\nimport { fetchWrapper } from \"data/FetchWrapper\";\nimport {\n ResponseType,\n RegExFileExtension,\n ImageFileExtensions,\n} from \"data/Types\";\n\nconst useImagePreview = (response = {}) => {\n const [unique, setUnique] = useState(response.id);\n const [image, setImage] = useState(response.image);\n let isImage = false;\n if (response.responseType === ResponseType.FILE) {\n isImage = ImageFileExtensions.includes(\n RegExFileExtension.exec(response.title)[0]\n );\n }\n // handle row change\n useEffect(() => {\n if (!image && response.responseType === ResponseType.FILE && isImage) {\n fetchWrapper\n .download(`/api/file/${response.id}`)\n .then((image) => setImage(URL.createObjectURL(image)))\n .catch((e) => console.log(e));\n } else if (\n image &&\n response.responseType !== ResponseType.FILE &&\n response.responseType !== ResponseType.GOOGLE\n ) {\n setImage(null);\n }\n return () => {\n URL.revokeObjectURL(image);\n };\n }, [image, response.id, response.responseType, isImage]);\n // handle response change\n useEffect(() => {\n if (\n unique !== response.id &&\n response.responseType === ResponseType.FILE &&\n isImage\n ) {\n fetchWrapper\n .download(`/api/file/${response.id}`)\n .then((image) => {\n setImage(URL.createObjectURL(image));\n setUnique(response.id);\n })\n .catch((e) => console.log(e));\n }\n }, [unique, response.id, response.responseType, isImage]);\n const isLoading = !image && response.responseType === ResponseType.FILE;\n return useMemo(() => [image, isImage, isLoading], [\n image,\n isImage,\n isLoading,\n ]);\n};\nexport { useImagePreview };\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"app\":\"App_app__1kX79\",\"query\":\"App_query__1yIlU\",\"splash\":\"App_splash__2fEdQ\",\"header\":\"App_header__3ZZ1n\",\"nav\":\"App_nav__1_46_\",\"main\":\"App_main__3ZkGI\",\"footer\":\"App_footer__29Fsv\"};","import React from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nconst prefix = (icon) =>\n [\"google\", \"wikipedia-w\", \"microsoft\"].includes(icon) ? \"fab\" : \"fa\";\n\nconst FA = ({ icon, ...props }) => (\n